问题标签 [qimage]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
7400 浏览

c++ - Qt QImage 像素操作问题

我目前正在使用 Qt 编写隐写术应用程序。我试图将我的消息位隐藏在像素蓝色的最低有效位中。

从调试中我可以看出这部分工作正常。但是,在将我的位隐藏在消息中之后,我保存图像然后重新打开它。这就是问题发展的地方。

当我在(重新打开的)图像scanLines中阅读时,我阅读的内容与我之前写的不同,我不知道为什么。也许只是我愚蠢,或者我错过了一些东西。任何帮助将非常感激。

我到目前为止的代码如下

谢谢

0 投票
12 回答
6133 浏览

qt - 在 py2exe 编译的 Python 脚本中启用对 QImage 的 JPEG 支持?

我正在尝试通过 PyQt4 在 Python 脚本的 QImage 对象中使用 JPEG 图像。

脚本本身完美运行,图像加载并且可以被操纵和渲染等等。但是,当我尝试用 py2exe“编译”这个脚本时,除了 JPEG 图像之外,一切正常。用等效的PNG替换它,但由于我的程序从网上下载图像,它们并不总是PNG格式,我不能用另一个库将它们全部转换。

我发现 QImage 的 JPEG 图像支持以及其他图像格式是由 \qt\plugins\imageformats 目录中的一些 DLL 提供的(它们被称为 qjpeg4.dll 和 qjpeg4d.dll)。我想我需要在我的可执行文件中以某种方式使用它们,但我不知道如何。我试过简单地将它们复制到我的 exe 目录,没有运气。如此处所示,我已尝试将这些文件作为 data_files 包含在 setup.py 脚本中,但没有运气(看起来它所做的只是将这些文件复制到 exe 的目录中,因此无论如何手动复制它们并没有改变)。

我敢肯定有一些应用程序使用 PyQt 和 JPEG 图像,他们是怎么做到的?这似乎是一项微不足道的任务,但我现在坚持下去。

另外,我希望我的应用程序是跨平台的(为什么还要用 Python 编码?),我希望在为 OS X 或 Linux 打包时不会遇到这样的打包问题(这不是唯一的问题)。我会吗?

0 投票
2 回答
1889 浏览

python - PyQt4 - 图像水印

我正在尝试打开一个 PNG 图像并通过 QImage 和 QPainter 向它写入一些文本(水印)。该代码在 Linux 上 100% 工作,但是当我在 Windows XP 上运行它时(尚未使用任何其他版本的 Windows 进行测试),文本永远不会写入图像。我在 try/except 块中有代码,但没有返回错误。

使用 Python 2.6.2、PyQt 4.5.4

有任何想法吗?

0 投票
3 回答
3798 浏览

c++ - QWidget 外部 GUI 线程上的绘画问题

我正在开发一个应用程序,我想在其中连续接收来自远程主机的图像并将它们显示在我的屏幕上。为此,我遵循给定的策略 1)我有一个包含 QImage 的主 QWidget 对象(工作正常) 2)从远程主机接收到的图像被绘制在 QImage 对象上,这项工作是在使用 QPainter 的工作线程中完成的。(工作正常)3)但问题是图像没有在 QWidget 上更新,除非我调整小部件的大小,因为为 QWidget 调用了重绘事件......现在如果我从工作线程重绘 QWidget,它会给出错误“ QPixmap:在 GUI 线程之外使用像素图是不安全的”.. 并且应用程序崩溃。

对此有任何帮助吗?

0 投票
3 回答
11046 浏览

c++ - Qt:QImage总是将透明色保存为黑色

如何在没有 Qt 将透明颜色变为黑色的情况下将具有透明度的文件保存为 JPEG 文件?我知道 JPEG 不支持 alpha,黑色可能只是 alpha 的默认“0”值,但黑色是一种可怕的默认颜色。

看起来这应该是一个简单的操作,但是当保存为 JPEG 时,我尝试过的所有掩码和 alpha 函数都被忽略了。

例如:

我尝试在保存为 JPEG 之前用白色填充图像,在保存之前将图像转换为 ARGB32(使用 8 位 alpha 通道),甚至尝试过慢得离谱的东西,例如:

0 投票
4 回答
11501 浏览

qt - 如何解决 QPixmap::fromImage 内存泄漏?

我对 Qt 有疑问。

这是困扰我的代码的一部分:

因此,该方法showOnScreen使用私有方法从(OpenCV 使用)QImageIplImageCvt创建,然后用于创建以全屏显示图像。类继承。QImageIplImageQPixmapFullScreenImageQLabel

经过一段时间的延迟,全屏图片应该被隐藏,所以我使用QTimer延迟一段时间后触发事件。事件处理程序是hideOnScreen隐藏标签并应清除内存的方法。

问题如下:

每当我调用QPixmap::fromImage时,它都会为像素图数据分配内存并将数据从QImage内存缓冲区复制到QPixmap内存缓冲区。隐藏标签后,QPixmap数据仍然保持分配状态,更糟糕的是,在新QPixmap::fromImage调用之后,为新图片分配了新的内存块,而旧数据并没有从内存中释放出来。这会导致内存泄漏(使用我的测试图片的每个方法调用大约 10 MB)。我该如何解决这个泄漏?

我什至尝试创建一个私有QPixmap变量,存储由QPixmap::fromImage它创建的像素图,然后尝试在hideOnScreen方法中调用它的析构函数,但它没有帮助。

有没有一种非静态的方式来QPixmap创建QImage?或者更好的是,有没有办法QPixmap直接从创建IplImage*

预先感谢您的回答。

0 投票
5 回答
5311 浏览

image - QImage 是否能够打开和渲染纯 16 位图像?

我想标题已经解释了我想知道的。
有没有可能用 Qt 打开和保存 16 位图像的方法?我不是说 3*8=24bit 或 4*8=32bit,和纯 8-bit 图像完全一样,我是指 R、G 和 B 的纯 16-bit。

0 投票
5 回答
2616 浏览

c++ - 如何在不加载完整文件的情况下检查文件是否是/不是图像?是否有图像标题阅读库?

编辑:

对不起,我想我的问题很模糊。我想有一种方法来检查文件是否不是图像,而不会浪费时间加载整个图像,因为这样我可以稍后再进行其余的加载。我不想只检查文件扩展名。

该应用程序仅查看图像。通过“检查有效性”,我的意思是也在目录中“检测并跳过非图像文件”。如果像素数据已损坏,我仍想将其视为图像。

我分配页码并将这些图像配对。有些图像是单个左页或右页。有些图像很宽,是左右页面的“展开”。例如, pagesAt(3) 和 pagesAt(4) 可以返回相同的 std::pair 图像或 std::pair 相同的宽图像。

有时,有奇数个“薄”图像,第一个图像将单独显示,类似于宽图像。一个例子是单个封面。

不知道目录中的哪些文件是非图像意味着我无法自信地分配这些页码并将文件配对以进行显示。此外,用户可能决定跳转到第 X 页,当我后来发现并删除非图像文件并相应地重新分配页码时,第 X 页可能看起来是不同的图像。

原文

万一这很重要,我正在使用 Qt 库中的 c++ 和 QImage。

我正在遍历一个目录并在图像的路径上使用 QImage 构造函数。当然,这非常慢,并且会使应用程序感觉没有响应。但是,它确实允许我检测无效的图像文件并尽早忽略它们。

我可以在浏览目录时仅保存图像的路径,并仅在需要时才实际加载它们,但是我不知道图像是否无效。

我正在考虑将这两者结合起来。即在遍历目录时,仅读取图像的标题以检查有效性,然后在需要时加载图像数据。

所以,

仅加载图像标题会比加载整个图像快得多吗?还是做一些 i/o 来读取标题意味着我还不如完全加载图像?稍后,我也会从档案中解压缩图像,因此这也适用于仅解压缩标题与解压缩整个文件。

另外,我不知道如何加载/读取图像标题。是否有一个可以只读取图像标题的库?否则,我必须自己打开每个文件作为所有文件类型的流和代码图像标题阅读器。

0 投票
1 回答
2717 浏览

c++ - 来自数据流的 QImage

我正在使用 Qt 库,创建 QImages。

我可以使用这个构造函数

但是我在使用这个静态函数时遇到了问题:

Qt 向控制台吐出的地方:

以上不完全是我所拥有的,但这是唯一重要的区别。(我需要能够从缓冲区读取,因为我正在打开 zip 存档中的图像。)

0 投票
4 回答
6595 浏览

image - Qt 图像格式插件

有人能指出我不支持 Qt 图像格式插件(读/写)的网站吗?例如 XCF 和 PSD。