繁体   English   中英

使用QPainter确定在绘制时QImage的哪些像素被更改

[英]Determine which pixels of QImage were changed while painting on it with QPainter

我有类Paintable ,可以使用QPainter作为参数绘制自己:

class Paintable
{
public:
    virtual void paint(QPainter*) = 0;
};

这个类的实例正在一个QImage上绘制:

QImage paint(const std::vector<Paintable*>& paintables) {
    QImage result;
    QPainter p(&result);
    for(int i = 0; i < paintables.size(); ++i) {
        paintables[i]->paint(&p);
    }
    return result;
}

我想要实现的是,函数paint也可以形成一个大小等于result图像大小的矩阵,其中每个单元格包含一个指向Paintable的指针,该指针在result图像中绘制了相应的像素(类似于z-buffer)。

如果QPainter绘制方法以某种方式让我知道QPaintDevice的哪些像素在最后的绘制操作期间被改变,则可以很容易地实现。 有什么想法怎么做? 我应该创建从QPaintDeviceQPaintEngine派生的类吗?

我使用的是Qt 4.6.4。

谢谢。

也许不是将所有的Paintables绘制到同一个QImage上,而是将每个绘制到一个临时的空白QImage上 - 即所有像素设置为RGBA =(0,0,0,0)的QImage。 这样,在给定的Paintable的paint()方法返回之后,您知道QImage中现在不透明的任何像素都必须由该Paintable对象绘制。 然后,您可以根据该信息更新您自己的z-buffer数据结构,然后将QImage drawImage()转换为单独的“accum QImage”(假设您还需要合成结果),再次清除临时QImage,以及必要时重复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM