gpt4 book ai didi

c++ - 如何在不复制 QGraphicsScene 的情况下显示 QImage

转载 作者:行者123 更新时间:2023-11-28 06:07:32 27 4
gpt4 key购买 nike

我有自己的图像类,其中包含一个带 RGB 值的无符号字符数组。我想在 QGraphicsScene 中显示存储在此类中的图像,而不复制它们。我可以用

QImage image(data, width, height, width * 3, QImage::Format_RGB888);

不复制我的图像。如何在没有数据深拷贝的情况下在 QGraphicsScene 中显示图像?

最佳答案

在默认情况下,光栅绘制引擎/后端,顶级小部件的内容存储为 QImage。在其上绘制 QImage(以及 QPixmap)很快并且不涉及拷贝。 QPixmap,带有光栅后端,在内部只是一个QImage,它与后备存储的格式相同。像素图通常不代表任何 native 资源句柄 - 因为您使用的是光栅后端,除非您明确要求其他内容。

所以您希望做的是在QGraphicsItem::paint 实现中直接从您的源图像drawImage。幕后真正发生的是 paint 在后备存储上执行 - 一个 QImage,这既快速又高效。您使用的 QPainterQImage 上运行!

您所要做的就是实现一个类似于QGraphicsPixmapItemQGraphicsImageItem。只要您的源图像与支持顶级窗口的图像具有相同的格式,就不会涉及复制和格式转换。你怎么知道的?只需向后备存储询问其格式。

QImage::Format backingStoreFormat(QWidget * widget) {
auto store = dynamic_cast<QImage*>(widget->backingStore()->paintDevice())
return store ? store->format() : QImage::Format_Invalid;
}

我把QGraphicsImageItem的实现留给读者:)

关于c++ - 如何在不复制 QGraphicsScene 的情况下显示 QImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32101556/

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