2017-03-09 51 views
0

我在Qt5应用程序中使用libdmtx。 (我打得周围的一些替代品,我不会去,为什么他们不适合我......)如何在没有ImageMagick的情况下将ImageMagick图像导入到Qt5应用程序中?

我想在我的UI一个点来显示数据矩阵条形码。我有一个这样的行,如果我对ImageMagick的链接,应该工作:

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

的事情是,我已经使用QT5,我真的不希望添加额外的整个库,以显示一个图像。有一些解释,这条线是on the ImageMagick website

我真的希望将其加载到一个有效的QImage(虽然像素图和如也没关系,关键是我要显示它)。我试过这个网页上的所有相关职能和正在运行的想法:https://doc.qt.io/qt-5/qimage.html#QImage-3

enc-成员>图像近似由此而得名:

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

提前感谢!

回答

1

OK,这并不意味着是这些答案 - 我 - 拥有 - 问题的事情之一。我真正想到会发生的事情是,我会反对ImageMagick,也许有人会发布一个答案,帮助下一个人下线。

但是,我自己得到了。

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

这些参数是什么?魔法?号下面是构造函数的签名:

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

我从这里:https://doc.qt.io/qt-5/qimage.html#QImage-4

的第一个参数,显然是pxl的无符号的字符*。这样就缩小了我的选择范围。我认为宽度和高度是非常明显的。诀窍是选择正确的编码格式。我知道它是RGB,因为在ImageMagick代码中它被指定为RGB。这样就缩小了一点。但这还不够。 我知道像素一样的东西进来,因为三胞胎ImageMagick的行指定他们,RGB,在三胞胎(这是更清楚的ImageMagick文档)

所以从https://doc.qt.io/qt-5/qimage.html#Format-enum正确的选择必须是RGBXXX。鉴于像素被编码为“Charpixels”,我猜测每个像素都由一个字符表示(即8位“字节”),因此我希望图像格式具有所有八个像素,因此RGB888。

我希望这有助于未来的家伙:-)

(是的,现在回想起来似乎面临-smackingly明显)

+0

如果你有Qt的,还有什么理由使用ImageMagick的... –

相关问题