c++ - 如何在没有 ImageMagick 的情况下将 ImageMagick 图像导入 Qt5 应用程序?

标签 c++ qt imagemagick qt5

我在 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/

相关文章:

c++ - 未加载 Qt ODBC 驱动程序

java - im4java 转换为 jpg,图像崩溃

php - 如何在 PHP 中使用 Imagick 压缩 .png?

使用 16 字节 key 的 C++ Des 加密

c++ - 如何线性化两个浮点变量的乘积

c++ - 获取 std::optional 包含的类型的最佳方法是什么?

ruby-on-rails - Windows : ImageMagick/GraphicsMagick is not installed 上的 Rails 错误

c++ - 如何使我的输出有空间(偶数和奇数)

C++ - 如何隐藏其他应用程序的窗口

python - PyQt4 - 拖放