Lire et afficher une image en Qt
Bonjour,
j'ai une image dans un fichier particulier nommé .fxd
je dois lire mon image, la stocker dans un buffer ensuite l'afficher dans un QLabel, faire des traitements et la sauvegarder par la suite.Mais j'ai un un probléme pour la lecture de l'image:voici mon bout de code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| QFile file(FileName);
if(!file.open(QIODevice::ReadOnly)) //On ouvre le fichier en lecture seule
{
QMessageBox::information(this, tr("Image Viewer"),
tr("Cannot Open %1.").arg(FileName));
}
else
{
QMessageBox::information(this, tr("Image Viewer"),
tr("File succesfull Open %1.").arg(FileName));
QDataStream in(&file);//Lu les données contenues dans le fichier.
QByteArray byteArray;//Declaration d'un tableau.
byteArray.resize(2700000) ;//On redimensionne le tableau à la taille de l'image.
in >> byteArray ;
QBuffer buffer(&byteArray);//On crée un buffer pour le tableau.
QDataStream out(&buffer) ;//On ecrit les données dans le buffer.
QPixmap *pixmap = new QPixmap(byteArray) ;
ui->ZoneImage->setPixmap(*pixmap) ; |
et là j'ai un probléme , je me suis perdu dans mes idées et rien ne s'affiche dans le QLabel.
Aider moi svp et merci d'avance.
Lire et afficher une image en Qt
Bonjour, bon je reformule ma question et je vous propose ma nouvelle demarche:
En fait le format fxd est un format de fichier d'image structuré de la maniére suivante:le fichier est composé de 3partie:
une premiere partie comportant les caracteristiques de l'image à savoir nombre de lignes, de colonnes, niveau de gris max et min ....
une deuxieme partie comportant des commentaires et
une troisieme partie representant l'image elle meme c'est a dire les valeurs des pixels.
Vu que Qt ne gere pas ce format c'est bien ce que je pense;j'ai décidé de lire le fichier fxd pour pouvoir connaitre le nombre de lignes et de colonnes des pixels de l'image et ensuite je vais lire et stocker les pixels dans un buffer pour pouvoir faire appel à la classe QPixmap qui me permettra à partir du buffer d'afficher l'image dans un QLabel.
Mon probléme est que je sais pas comment avec Qt lire dans un fichier image et affichier les valeurs lues c'es a dire nombre de lignes et de colonnes.Ceci me permettra d'enlever les 2 premieres parties du fichier qui ne font pas parti de l'image. et l'autre question est comment stocker les pixels lus dans un buffer ,en d'autre terme faire une allocation dynamique de mémoire.
Voici mon bout de code:si quelqu'un peut contribuer à la solution svp car c'est tres urgent pour moi et merci d'avance
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| QFile file(FileName);
if(!file.open(QIODevice::ReadOnly)) //On ouvre le fichier en lecture seule
{
QMessageBox::information(this, tr("Image Viewer"),
tr("Cannot Open %1.").arg(FileName));
}
else
{
QMessageBox::information(this, tr("Image Viewer"),
tr("File succesfull Open %1.").arg(FileName));
QDataStream in(&file);//Lecture des données contenues dans le fichier.
quint16 rows ;
quint16 columns ;
in >> rows >> columns ;
QMessageBox::information(this, tr("Image Viewer"),
tr("the number of the columns is%1.").arg(rows),tr("the number of the rows is%1.").arg(columns) );
QBuffer buffer ;
in >> buffer ;
QIODevice::readLineData(FxdHeader,12);
ui->ZoneImage->setPixmap(QPixmap::fromImage(image)); |
Mais là j'ai n'importe quoi comme valeur de rows et columns
Lire et afficher une image en Qt
Bonjour, je relance ma question car j'ai toujours pas trouvé la solution et je souffre là,mdr!!!!
je sais comment sont ordonnées les données dans mon fichier binaire:alors j'ai dans l'ordre dans le fichier:
FileMagic;
NbLignes;
NbColonnes;
GrayLevel;
LengthComments;
Alors l'idée que j'ai c'est de lire par bloc d'octets et de retourner ces 5 premieres valeurs lus; voici mon code,mais ça me retourne n'importe quoi:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| QFile file(FileName);
if(!file.open(QIODevice::ReadOnly)) //On ouvre le fichier en lecture seule
{
QMessageBox::information(this, tr("Image Viewer"),
tr("Cannot Open %1.").arg(FileName));
}
else
{
QMessageBox::information(this, tr("Image Viewer"),
tr("File succesfull Open %1.").arg(FileName));
file.seek(0) ;
QDataStream in(&file);//Lecture des données contenues dans le fichier.
quint16 FileMagic ;
quint16 NbLignes ;
quint16 NbColonnes ;
quint16 GrayLevel ;
quint16 LengthComments ;
in >> FileMagic >> NbLignes >> NbColonnes >> GrayLevel >> LengthComments;
QMessageBox::information(this, tr("Image Viewer"),
tr("the number of the File Magic is%1.").arg(FileMagic),tr("the number of the rows is%1.").arg(NbLignes ),tr("the number of the columns is%1.").arg(NbColonnes ) );
QMessageBox::information(this, tr("Image Viewer"),
tr("the number of the GrayLevel is%1.").arg(GrayLevel));
QMessageBox::information(this, tr("Image Viewer"),
, tr("the length of the comment is%1.").arg(LengthComments) ) ;
ça m'affiche n'importe quoi et je sais pas c'est en quoi les valeurs qu'il m'affiche est ce en Octet??? |
Aidez moi svp ,je sais pas si ma lecture elle est bonne??
Lire et afiichier une image en Qt
Code:
1 2 3 4 5
| long FileMagic ;
long NbLignes ;
long NbColonnes ;
long LengthComment ;
long GrayLevel |
Oui yan ces valeurs sont tous en Long et sont aussi ecrit en binaire , donc j'imagine peut etre bien qu'il faut les convertir avant de les afficher je pense??
Lire et afficher une image en Qt
Bonjour, oui j'ai essayé vos conseils sachant que long est codé sur 4octets donc 32 bits:
j'ai utilisé:
Code:
1 2 3 4 5 6 7 8 9
| long FileMagic ;
long rows ;
long columns ;
long NbFrames ;
long PixelTypes ;
long QuantLevels ;
long MaxSignalLevel ;
long MinSignalLevel ;
long CommentLength ; |
j'ai obtenu des valeurs tres aluucinantes , je me demande s'il faut pas que je les convertissent en entiers, si c'est le cas que demande comment j'espere que j'ai pas dit une connerie car les valeurs que j'obtiennent sont:
Code:
1 2 3 4
| 1683514470
134676480
3691315200
16777216 |
je pense vraiment que ce ne sont pas les bonnes valeurs ou comme je l'ai dit il faut les convertir!!!
Lire et afficher une image en Qt
Bonjour, c'est exactement un probléme d'endian!!!
Mais je suis incapable de retrouver comment chager l'endian de QDataStream avant de commencer la lecture du fichier!
Et de plus je vois pas trop ce que ça reprensente cette histoire d'endian qui me pourrit la vie!!
si vous pouvez m'expliquer comment je peux le changer dans QDataStreamavant de commencer le lecture svp??
Lire et afficher une image en Qt
Bonjour Yan , c'est exactement un type de doc que j'ai du mal à piger sans commentaire ça fait 2 jours que je lis ce doc que tu m'avais déja envoyé mais je comprends pas comment l'utiliser.Si tu peux me montrer avec ce QDataStream pour que je comprenne une bonne fois comment on utilise les prototypes données dans ce doc?
Merci d'avance.