【发布时间】:2017-03-28 04:44:35
【问题描述】:
我尝试叠加 3 个 QImage 但我有一些警告,例如:
QImage::pixelColor: coordinate (31,30) out of range
并且混合的结果是黑色图像。
这是我的代码:
QBrush MainWindow::blendLayer(int x, int y){
QImage blend(m_layer1_data[x][y]->background().textureImage());
QImage l2(m_layer2_data[x][y]->background().textureImage());
QImage l3(m_layer3_data[x][y]->background().textureImage());
for(int a = 0; a < blend.width(); a++){
for(int b = 0; b < blend.height(); b++ ){
blend.setPixelColor(a,b,blendColor(blend.pixelColor(a,b),l2.pixelColor(a,b),l3.pixelColor(a,b)));
}
}
QBrush brush(blend);
return brush;
}
QColor MainWindow::blendColor(QColor c2, QColor c1){
QColor c3;
c3.setRed(((c1.red()+c2.red())/2)%256);
c3.setGreen(((c1.green()+c2.green())/2)%256);
c3.setBlue(((c1.blue()+c2.blue())/2)%256);
c3.setAlpha(((c1.alpha()+c2.alpha())/2)%256);
return c3;
}
QColor MainWindow::blendColor(QColor c1, QColor c2, QColor c3){
return blendColor(c3,blendColor(c1,c2));
}
有没有一种简单的方法来叠加一些 QImage ? 感谢您的帮助
【问题讨论】:
-
l2和l3的大小是多少? -
你为什么不使用 QGraphicsPixmapItem 为你的图像?使用 setZValue 你可以假设它们。
-
m_layer1_data[x][y]、m_layer2_data[x][y]和m_layer3_data[x][y]的类型是什么? -
QPainter可以完成您想要的所有混合,而且速度很快。您的代码也不会如图所示编译。您必须更改源图像的 alpha,然后简单地将它们绘制在彼此之上。 Painter 也可以更改 alpha,因此所有操作都将使用 SIMD 快速和加速。使用 Painter 时,源图像的大小无关紧要,只要它们对您的应用程序有意义即可。 -
@eyllanesc 看起来他们是
QBrush。