我在 Qt5 应用程序中使用 libdmtx。 (我尝试过一些替代方案,但我不会深入探讨为什么它们不适合我...)
我想在我的 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->image 的成员大致这样命名:
bitsperchannel
bitsperpixel
bytesperpixel
channelcount
channelstart
height
imageFlip
pixelPacking
pxl
rowPadBytes
rowSizeBytes
width
提前致谢!
最佳答案
好吧,这并不意味着是那些回答我自己的问题的事情之一。我真正认为会发生的是无论如何我都会链接到 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是一个unsigned char *。所以这缩小了我的选择范围。我认为宽度和高度非常明显。诀窍是选择正确的编码格式。我知道它是 RGB,因为在 ImageMagick 代码中它被指定为 RGB。所以这缩小了一点。但这还不够。 我知道像素事物以三元组出现,因为 ImageMagick 行以三元组指定它们,RGB(这在 ImageMagick 文档中更清楚)
因此来自 https://doc.qt.io/qt-5/qimage.html#Format-enum正确的选择必须是 RGBXXX。鉴于像素被编码为“Charpixels”,我猜测每个像素都由一个字符(即一个 8 位“字节”)表示,因此我想要所有八位的图像格式,因此是 RGB888。
我希望这对下一个人有帮助:-)
(是的,回想起来这似乎是显而易见的)
关于c++ - 如何在没有 ImageMagick 的情况下将 ImageMagick 图像导入 Qt5 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42690321/