Qt4: écrire QByteArray de fichier avec le nom de fichier?
J'ai de la difficulté à Qt 4 avec l'écriture de fichiers non textuels. J'ai un QByteArray de données et je veux l'enregistrer dans un fichier avec le nom "some_name.ext" dans le répertoire spécifique: "C://MyDir". Comment puis-je faire cela? Notez que le contenu n'est pas dans le texte.
Le format est "GIF", et il n'est pas pris en charge par Qt.
QImage mainImage;
if (!mainImage.loadFromData(aPhoto.data))
return false;
if (!mainImage.save(imageName, imageFormat.toUtf8().constData()))
return false;
Je veux contourner en quelque sorte que la restriction!
Pourquoi ne pas vous montrer ce que vous avez essayé jusqu'à présent?
Voici ce que j'ai à faire. Mais sauver la fonction renvoie la valeur false, en raison de la non format pris en charge. Donc je pense que si je pouvais sauver l'objet byteArray de données sans passer par QImage, peut-être que je vais réussir?!
Êtes-vous vraiment sûr que vous avez besoin des images au format GIF? L'utilisation d'autres formats, par exemple PNG, rend la vie plus facile avec Qt.
Le format de fichier GIF est considérée comme obsolète de nos jours. PNG est une meilleure alternative.
Juste donner "PNG" comme un format de la save() de la fonction. Il n'importe pas quel est le format d'origine.
Voici ce que j'ai à faire. Mais sauver la fonction renvoie la valeur false, en raison de la non format pris en charge. Donc je pense que si je pouvais sauver l'objet byteArray de données sans passer par QImage, peut-être que je vais réussir?!
Êtes-vous vraiment sûr que vous avez besoin des images au format GIF? L'utilisation d'autres formats, par exemple PNG, rend la vie plus facile avec Qt.
Le format de fichier GIF est considérée comme obsolète de nos jours. PNG est une meilleure alternative.
Juste donner "PNG" comme un format de la save() de la fonction. Il n'importe pas quel est le format d'origine.
OriginalL'auteur Don Angelo Annoni | 2012-10-20
Vous devez vous connecter pour publier un commentaire.
À écrire un QByteArray dans un fichier:
N'oubliez pas de vérifier les erreurs, bien sûr.
Également noter que même si cela répond à votre question, il n'a probablement pas résoudre votre problème.
Juste une question... n'est-ce pas laisser ouverte une possibilité qui écrivent seulement écrit une partie de la matrice, avant de les remplir? En d'autres termes, doit-il pas y avoir une boucle while ici?
Nope. Le
write()
fonction permet de rédiger l'ensemble de la matrice.ok, mais quel est le but de la "octets écrits" valeur de retour?
Pour les fichiers normaux, la valeur de retour sera -1 si il y a une erreur. Pour d'autres
QIODevice
types bien, il peut indiquer que l'appareil ne peut tout simplement pas tenir toutes les données, auquel caswrite()
serait-il suffit de retourner le nombre d'octets qui ne fit, mais il n'y a pas d'erreur. Je ne suis pas sûr de ce qui se passe si l'écriture d'unQFile
résultats dans la totalité de l'espace disque. Je pense qu'il serait de retour -1 dans ce cas. Mais de toute façon, vous ne pouvez pas utiliser une boucle. Vous devriez juste appelerwrite()
une fois et vérifier si la valeur de retour est< data.size()
, dans ce cas, vous pouvez la traiter comme une erreur.OriginalL'auteur Nikos C.
Vous pouvez utiliser QDataStream pour écrire des données binaires.
Ensuite utiliser
ou
J'ai lus une Image GIF et maintenant, les données sont en QByteArray. Voulez-vous me dire que si j'ai écrit les données dans un fichier "blabla.gif" que sera inutile (je peux l'ouvrir qu'avec des régulière de l'Image dans la Visionneuse de fichiers gif) ?
Oui, ce sera inutile. Les formats d'Image (comme le format GIF, JPG, PNG) ne sont utilisés que pendant les opérations de chargement et de sauvegarde. La représentation interne est différente. Juste de l'écriture de la représentation interne d'un fichier et en donnant le nom de fichier .gif extension ne fonctionne pas.
Alors, Comment faire pour enregistrer cette grande séquence de '1' et '0' dans la manière que les gens peuvent l'ouvrir et afficher le magnifique paysage de la sorcière est codé en QByteArray?
Qt prend en charge les images GIF. À moins que, dans la version de Qt que vous avez installé le soutien a été désactivé.
OriginalL'auteur Yuan