Bonjour,
j'ai besoin de créer un objet QImage à partir d'une image de type ImageMagick comment puis je faire?
Merci
Bonjour,
j'ai besoin de créer un objet QImage à partir d'une image de type ImageMagick comment puis je faire?
Merci
Bonjour,
Que n'arrive tu pas a faire? et quel est ta version de QT?
j'ai Qt 4.1.4 et j'ai un objet Image de la bibliotheque Image magick et je veux afficher cet objet dans un Qpainter en passant par un QImage
As mon avis tu as deux solutions :
- tu génère un buffer adapté à QImage (à moin que imageMagik en fournie un) et tu créé ton image avec
QImage::QImage ( uchar * data, int width, int height, Format format )- tu créé ton image avec QImage::QImage ( int width, int height, Format format )
et tu recopie les pixels avec soit scanline soit stepixel
http://qt.developpez.com/doc/4.1/qimage/#scanline
http://qt.developpez.com/doc/4.1/qimage/#setpixel
accés aux pixels dans imagemagik
http://www.imagemagick.org/Magick++/Pixels.html
c'est un peu compliqué comme méthode je bloque pour le moment
faut que je réessaye je vous redis apres
Bonjour alors voila ce que je fais :
Et j'obtiens l'image que je désire !!! c'est un peu barbare mais ça marche merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Image im("essai.jpg");//création de l'image de type imageMagick QImage imQt = new QImage(QSize(im.columns(),im.rows()),QImage::Format_RGB32);//Création de mon image Qt dans laquelle je vai recopier les pixels for(int i = 0;i<im.columns();i++){ for(int j = 0;j<im.rows();j++){ PixelPacket *p = im.getPixels(i,j,1,1);//je récupere chaque pixel dans image magick Color *c = new Color(p->red,p->green,p->blue);//je recupere la couleur correspondant ColorRGB * color(*c);//je converti la couleur en rgb avec un ratio 0-1 QColor c2(color->red()*255,color->green()*255,color->blue()*255);//je créé mon objet couleur de qt en multipliant par 255 imQt.setPixel(i,j,c2->rgb());//je met le pixel dans l'image de Qt } }
tu as compris le principe . Par contre :
tu devrait plustôt faire en sorte d'en créer un qui contient tous les pixels.
Code : Sélectionner tout - Visualiser dans une fenêtre à part PixelPacket *p = im.getPixels(i,j,1,1);
la çà semble compliqué ce que tu fait. Je pense que tu fait trop d'opération. Tu as une fuite memoire avec le new
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Color *c = new Color(p->red,p->green,p->blue); correspondant ColorRGB * color(*c); QColor c2(color->red()*255,color->green()*255,color->blue()*255);
oui mais avec QImage je peux juste mettre pixel par pixel je suis embetté et sinon je comprend pas ta deuxième remarque je suis obligé de multiplié par 255
faudrait le faire une fois pour toute avant les boucle for.
j'ai regardé un peu, p->red,p->green,p->blue sont soit des unsigned char soit des unsigned short (depend de la compilateion).
http://www.imagemagick.org/Magick++/PixelPacket.html
Tu as donc tes valeur entre 0 et MaxRGB (constante de imageMagik qui dépend de la compilateion)
oui on est d'accord mais je peux pas créer mon image Qimage avec un ensemble de pixel je suis obligé de le faire dans la boucle for pour récupérer chaque couleur de pixel qui est différente
je voulais dire un truc comme
Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Image im("essai.jpg");//création de l'image de type imageMagick unsigned int columns =im.columns(); unsigned int rows=im.rows(); QImage imQt = new QImage(QSize(columns,rows),QImage::Format_RGB32);//Création de mon image Qt dans laquelle je vai recopier les pixels //accés a tous les pixels PixelPacket *itPixel = im.getPixels(0,0,columns,rows); for(int i = 0;i<columns;i++) for(int j = 0;j<rows;j++) { imQt.setPixel(i,j,qRgb(itPixel ->red/MaxRGB*255. ,itPixel ->green/MaxRGB*255. ,itPixel ->blue/MaxRGB*255.));// met le pixel dans l'image itPixel ++; }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager