我正在尝试在另一个图像上绘制图像(并且该部分有效),但在绘制覆盖图像之前我想降低它的不透明度。这就是我遇到麻烦的地方。我的叠加图像是PNG的,它们本身有透明区域,否则它们的内容是黑色的。在 Qt 中,我循环遍历每个像素,但无法确定像素是否透明 - 它告诉我每个像素都是黑色且具有完整的 Alpha。我尝试过检查像素颜色和 Alpha,但我一定做错了。搜索尚未找到解决方案。这是我正在使用的小循环:
// Set Alpha
for (int x = 0; x < overlay.width(); x++)
{
for (int y = 0; y < overlay.height(); y++)
{
pixelColor = QColor(overlay.pixel(x,y));
if (pixelColor.alpha() == 255)
{
overlay.setPixel(x, y, QColor(0,0,0,200).rgba());
//qDebug() << "Not Skipped";
}
else
{
qDebug() << "Skipped";
}
}
}
QImage 说我的叠加图像格式是 Format_ARGB32。有人知道我做错了什么吗?根据 Qt 文档,我应该能够使用 alpha(),但它为每个像素提供了 255。也许我把颜色弄错了?
你的问题在于QColor(QRgb)构造函数 http://qt-project.org/doc/qt-4.8/qcolor.html#QColor-3:
使用值颜色构造颜色。 Alpha 分量被忽略并设置为实体。
你遇到这个问题是因为QImage::pixel(int,int)
返回一个QRgb
。你应该使用QImage::pixelColor(int,int)
相反(如果可用,在 Qt 5.6 中引入),或者使用QRgb
直接,像这样:
QRgb col = image.pixel(x,y);
if(qAlpha(col) == 255) {}
请注意,如果您想降低图像的不透明度,您可以随时更改 QPainter 的不透明度 http://qt-project.org/doc/qt-4.8/qpainter.html#setOpacity.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)