【发布时间】:2023-04-08 00:45:01
【问题描述】:
QPainter负责Qt中的绘图和合成。有一个section in the documentation 谈论性能。我的问题是关于下一段中的粗体句子。
Raster - 此后端在纯软件中实现所有渲染,并始终用于渲染到 QImages 中。为获得最佳性能,仅使用格式类型 QImage::Format_ARGB32_Premultiplied、QImage::Format_RGB32 或 QImage::Format_RGB16。 任何其他格式,包括 QImage::Format_ARGB32,性能明显较差。该引擎默认用于 QWidget 和 QPixmap。
我了解将颜色通道乘以 alpha 是在源操作中完成的。这种乘法可以提前完成,以避免在合成器中进行。执行此乘法涉及将 RGB 通道乘以 alpha,然后除以 255(或乘以以正确方式溢出以模仿除法的某个幻数)。这是每像素六个整数乘法。执行额外的六个整数乘法肯定不会有“明显更差的性能”吗?
alpha 乘法真的那么慢吗?也许他们只是说他们不会像其他人那样尝试优化该代码路径,因此无法保证它的执行方式?
【问题讨论】:
-
That's six integer multiplications per pixel,所以对于 4k 电影,它是 6 x 3840 x 2160 x 60 = ~3000M 次/秒 -
@IłyaBursov 这是很多乘法!不过,我并没有在我的应用程序中处理这种吞吐量。
-
That's six integer multiplications per pixel哦,这很糟糕。很坏。任何体面的分辨率都有超过 500k 像素。单张图片 300 万次乘法可不是开玩笑的。
标签: performance qt colors compositing premultiplied-alpha