【问题标题】:How do I import an ImageMagick image into a Qt5 app without ImageMagick?如何在没有 ImageMagick 的情况下将 ImageMagick 图像导入 Qt5 应用程序?
【发布时间】:2017-03-09 08:31:39
【问题描述】:

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

提前致谢!

【问题讨论】:

    标签: c++ qt imagemagick qt5


    【解决方案1】:

    好的,这并不是要回答我自己的问题之一。我真正认为会发生的是,无论如何我都会链接到 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。

    我希望这对下一个人有帮助:-)

    (是的,回想起来看起来非常明显)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-25
      • 2011-04-26
      • 2013-07-03
      • 2015-11-29
      • 2013-12-07
      • 1970-01-01
      • 1970-01-01
      • 2015-05-07
      相关资源
      最近更新 更多