2017-03-09 2 views
0

Ich benutze libdmtx in einer Qt5-Anwendung. (Ich habe mit einigen Alternativen herumgespielt und werde nicht darauf eingehen, warum sie für mich nicht richtig waren ...)Wie importiere ich ein ImageMagick-Bild ohne ImageMagick in eine Qt5-App?

Ich möchte an einer Stelle in meiner Benutzeroberfläche einen Datamatrix-Barcode anzeigen. Ich habe eine Zeile wie diese, die, wenn ich gegen ImageMagick Link sollte funktionieren:

MagickConstituteImage(wand, enc->image->width, enc->image->height, 
    "RGB", CharPixel, enc->image->pxl); 

Die Sache ist, ich bin mit QT5 bereits und ich will nicht wirklich eine ganze zusätzliche Bibliothek hinzufügen ein Bild anzuzeigen. Es gibt eine Erklärung dafür, was diese Zeile macht on the ImageMagick website.

Ich möchte es wirklich in ein gültiges QImage laden (obwohl Pixmaps und solche sind auch in Ordnung, der Punkt ist, ich möchte es anzeigen). Ich habe auf dieser Seite alle relevanten Funktionen ausprobiert und aus Ideen leite: https://doc.qt.io/qt-5/qimage.html#QImage-3

Die Mitglieder des ENC> Bild sind etwa so genannt:

  bitsperchannel 
     bitsperpixel 
     bytesperpixel 
     channelcount 
     channelstart 
     height 
     imageFlip 
     pixelPacking 
     pxl 
     rowPadBytes 
     rowSizeBytes 
     width 

Vielen Dank im Voraus!

Antwort

1

OK, das war nicht dazu gedacht, eines dieser Dinge zu sein, die meine eigenen Fragen beantworten. Was ich wirklich dachte, wäre, dass ich sowieso gegen ImageMagick verlinken würde, und vielleicht würde jemand eine Antwort posten, die dem nächsten Typen auf der ganzen Linie geholfen hat.

Aber ich habe es selbst.

QImage image(enc->image->pxl, enc->image->width, enc->image->height, QImage::Format_RGB888); 

Was sind diese Parameter? Zauber? Nein. Hier ist die Signatur für den Konstruktor:

QImage::QImage(const uchar *data, int width, int height, Format format, QImageCleanupFunction cleanupFunction = Q_NULLPTR, void *cleanupInfo = Q_NULLPTR) 

Ich habe das von hier: https://doc.qt.io/qt-5/qimage.html#QImage-4

Der erste param, offensichtlich PXL ist ein unsigned char *. Das hat meine Auswahl etwas eingeschränkt. Breite und Höhe sind ziemlich offensichtlich, denke ich. Der Trick war die Auswahl des richtigen Kodierungsformats. Ich weiß, dass es RGB ist, weil es im ImageMagick-Code als RGB spezifiziert ist. Das schmälert das ein bisschen. Aber es war nicht genug. Ich weiß, dass die Pixel thingies in Drillinge kommen, weil die ImageMagick Linie ihnen gibt an, RGB, in Tripletts (und dies ist deutlicher aus docs ImageMagick)

So von https://doc.qt.io/qt-5/qimage.html#Format-enum die richtige Wahl hat RGBXXX sein. Angesichts der Tatsache, dass die Pixel als "Charpixels" codiert waren, wagte ich eine Vermutung, dass jedes Pixel durch ein Zeichen (dh ein 8-Bit- "Byte") repräsentiert wurde und daher das Bildformat mit allen Achten wollte, daher RGB888.

Ich hoffe, dass dies den nächsten Kerl hilft :-)

(Und ja, im Nachhinein es von Angesicht smackingly scheint offensichtlich)

+0

Wenn Sie Qt haben, gibt es wenig Grund, ImageMagick zu verwenden ... –

Verwandte Themen