gpt4 book ai didi

qt - PyQt:使用 alpha channel 而不是预乘颜色 channel 创建 QPixmap

转载 作者:行者123 更新时间:2023-12-04 13:32:02 25 4
gpt4 key购买 nike

我想创建一个 QPixmap 以使用 QPainter 进行绘制。 QPixmap 应该支持透明而不使用预乘颜色 channel 。

目前,我通过创建具有所需尺寸的 QPixmap 并使用已针对每个 channel (包括 alpha)设置为零的 QColor 填充它来实现这一点。

tex = QtGui.QPixmap(width, height)
c = QtGui.QColor(0)
c.setAlpha(0)
tex.fill(c)

这增加了 QPixmap 的透明度。但是,如果我使用 QPainter 绘制到 QPixmap,绘制的颜色值将预乘源的 alpha 值。我不想要这个,因为 QPixmap 后来被用作 QGLWidget 中的纹理,并且在渲染 QPixmap 的 alpha channel (现在是使用 QPainter 绘制的源的 alpha)时再次与颜色 channel 相乘,所以alpha 乘以两次。

如果我使用格式为 QtGui.QImage.Format_ARGB32 的 QImage 代替 QPixmap,则不会预乘颜色 channel ,并且仅应用一次 alpha。然而,这在渲染过程中太慢了。我尝试使用上述格式在 QImages 上绘制,然后转换为 QPixmaps,但得到了相同的结果(预乘颜色 channel 再次乘以 alpha channel )。 Trolltech 文档说,

Depending on the system, QPixmap is stored using a RGB32 or a premultiplied alpha format. If the image has an alpha channel, and if the system allows, the preferred format is premultiplied alpha.

我正在使用 X (Linux)。当 QPixmap 具有 alpha channel 时,有什么方法可以强制 QPixmap 不预乘颜色 channel ?

最佳答案

我最终使用 QImages 并通过最小化我调用的 QGLWidget::bindTextures 的数量来优化我的代码。关于如何将预乘 QPixmaps 用作半透明纹理,我仍然没有收到令人满意的答案,但我对我的程序性能很满意,不会再检查这个线程。

关于qt - PyQt:使用 alpha channel 而不是预乘颜色 channel 创建 QPixmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5614939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com