importer une image JPG dans Qt

importer une image JPG dans Qt - C++ - Programmation

Marsh Posté le 13-10-2008 à 10:10:07    

Voila, j'ai un petit soucis dans une application que j'essaye de faire.
Je voudrais faire un programme qui prend une premiere image, calcul sa moyenne de rouge, vert, bleu,
puis ensuite parcourt un certain nombre d'autres images, et les modifie pour mettre les meme moyenne (le but étant d'uniformiser la luminosité de quelques centaines d'images d'un court metrage en stop motion)
 
Lorsque je teste mon embryon d'application sur des images en BMP, ca marche niquel...
Mais il ne veut pas prendre d'image JPG en entrée, alors que Qt est sensé supporter ce format sans problème... J'ai d'ailleur dans le dossier plugins du Qt les fichier permettant normalement de gerer le JPG.
 
Bon, voila le code, puis si quelqun pouvait m'aider, ca serait gentil ^^
 
 
 

Code :
  1. #include <iostream>
  2. #include <QString>
  3. #include <QImage>
  4. #include <QColor>
  5. #include <QMessageBox>
  6. #include <QApplication>
  7. int main(int argc, char* argv[])
  8. {
  9.     int r, g, b; //couleur de reference
  10.     int rn, gn, bn; //couleur de notre image en cour
  11.     int rdif, gdif, bdif; //différence entre nos couleur de départ et les nouvelle
  12.     int i, j, k, x; //i et j et k servent au boucle, x compte le nombre de passage dans la boucle
  13.     int v; //une valeure tampon pour mes changements de photo
  14.     int longueur, largeur; //taille de notre image
  15.     QImage* image; //notre image
  16.     QString nom, tampon; //variable servant a loader les images
  17.     QRgb color; //sert a recuperer la couleure d'un pixel
  18. QApplication app(argc, argv);
  19.     /*on recupere le nom de fichier passé en argument
  20.     puis on construit notre premiere image  a partir de ce nom*/
  21.     //nom = new QString(argv[1]);
  22.     nom = "bouh.jpg";
  23.     image = new QImage(nom);
  24.     /************************************
  25.     taille d'images fixées en dur. A automatiser
  26.     ************************************/
  27.     largeur = 3072;
  28.     longueur = 2304;
  29.     /*on calcul nos moyenne de r,g,b*/
  30.     r = 0;
  31.     g = 0;
  32.     b = 0;
  33.     x=0;
  34.     for(i=0;i<largeur/2; i=i+50)
  35.     {
  36.         color = image->pixel(i,i);
  37.         r = r + qRed(color);
  38.         g = g + qGreen(color);
  39.         b = b + qBlue(color);
  40.         x++;
  41.     }
  42.     r = r/x;
  43.     g = g/x;
  44.     b = b/x;
  45.     /**************************
  46.     on load notre deuxieme image...
  47.     pour plus tard: demander a l'utilisateur le nombre d'image
  48.     *****************************/
  49.     nom="DSCF2429.jpg";
  50.     for(k=0;k<2;k++)
  51.     {
  52.         image->load(nom);
  53.         //on calcul la moyenne de la deuxieme image
  54.         rn = 0;
  55.         gn = 0;
  56.         bn = 0;
  57.         x=0;
  58.         for(i=0;i<largeur/2; i=i+50)
  59.         {
  60.             color = image->pixel(i,i);
  61.             rn = rn + qRed(color);
  62.             gn = gn + qGreen(color);
  63.             bn = bn + qBlue(color);
  64.             x++;
  65.         }
  66.         rn = rn/x;
  67.         gn = gn/x;
  68.         bn = bn/x;
  69.         /***********************************
  70.         on calcul les différences
  71.         ***********************************/
  72.         rdif = r - rn;
  73.         gdif = g - gn;
  74.         bdif = b - bn;
  75.         //QMessageBox::information(NULL,"deplacement", QString::number(rdif));
  76.         //on modifie la deuxieme image en fonction de nos variables dif
  77.         for(i=0;i<largeur;i++)
  78.         {
  79.             for(j=0;j<longueur;j++)
  80.             {
  81.                 color = image->pixel(i,j); //on recupere la couleur du pixel a mosifier
  82.                 //on vérifie qu'on ne passe pas en couleure négative
  83.                 if((qRed(color)+rdif)<255)
  84.                 {   rn = qRed(color)+rdif; }
  85.                 else
  86.                 {   rn = 255; }
  87.                 if((qGreen(color)+gdif)<255)
  88.                 {   gn = qGreen(color)+gdif; }
  89.                 else
  90.                 {   gn = 255; }
  91.                 if((qBlue(color)+bdif)<255)
  92.                 {   bn = qBlue(color)+bdif; }
  93.                 else
  94.                 {   bn = 255; }
  95.                 //on modifie le pixel
  96.                 color = qRgb(rn, gn, bn);
  97.                 image->setPixel(i,j,color);
  98.             }
  99.         }
  100.         QMessageBox::information(NULL,"deplacement", "on va sauvegarder" );
  101.         //on sauvegarde l'image
  102.         image->save(nom);
  103.         QMessageBox::information(NULL,"deplacement", "j'ai fini" );
  104.         //on passe a l'image sivante en incrémentant les numero de 1
  105.         tampon = nom.left(8);
  106.         tampon = tampon.right(4);
  107.         v = tampon.toUInt();
  108.         v++;
  109.         tampon = QString::number(v); //contien les 4 chiffre
  110.         tampon += nom.right(4);  //contien les 4 chiffre + le .bmp
  111.         nom = nom.left(4); //contient les 4 lettre de gauches
  112.         nom += tampon; //contient le nouveau nom de fichier
  113.     }
  114. return app.exec();
  115. }


 
 

Reply

Marsh Posté le 13-10-2008 à 10:10:07   

Reply

Marsh Posté le 13-10-2008 à 10:42:26    

Hello,
 
    Dans QT, la gestions des formats giff, jpeg, tiff, ... se fait grâce a des dll. Et ces dll doivent se trouver dans un répertoires nommé "imageformats" dans le répertoire où se trouve ton application. (Les dll se trouvant dans le répertoire plugin de QT). Essaye déjà en rajoutant ce répertoire & dll.  
 
   Bon ça biensur si tu est sous windows...  
 
   Sous Linux, j'ai pas eu de pb...


Message édité par Amonchakai le 13-10-2008 à 10:43:06
Reply

Marsh Posté le 13-10-2008 à 11:00:30    

Merci beaucoup, ca marche impec!
Ils pourraient le mettre dans la doc quand meme les petits salopio (maintenant, si ca y est, je vais passer pour un con ^^)

Reply

Marsh Posté le 13-10-2008 à 11:21:14    

oui, regarde la doc ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed