我想知道一个已加载的QImage
是否包含alpha通道。我已经知道QImage::hasAlphaChannel()
可以告诉我正在使用的图像格式是否支持alpha通道,但是有没有办法知道它是否实际上在加载的图像中使用?
我想知道一个已加载的QImage
是否包含alpha通道。我已经知道QImage::hasAlphaChannel()
可以告诉我正在使用的图像格式是否支持alpha通道,但是有没有办法知道它是否实际上在加载的图像中使用?
这里是检查 alpha 是否真正被使用的代码片段。当图像在 ARGB32 格式时非常有用。
bool useAlpha = false;
const uchar* pixelData = image.bits();
int bytes = image.byteCount();
for (const QRgb* pixel = reinterpret_cast<const QRgb*>(pixelData); bytes > 0; pixel++, bytes -= sizeof(QRgb)) {
if (qAlpha(*pixel) != UCHAR_MAX) {
useAlpha = true;
break;
}
}
还要记住,这里有一个format()方法。
static_cast
而不是 reinterpret_cast
。但是我的编译器在这种情况下不允许我使用 static_cast
。您能否解释一下在这种情况下 reinterpret_cast
的用途以及为什么 static_cast
无法使用? - Pieterunsigned int
)是与uchar(unsigned char
)不同的类型,因此指针不兼容。 static_cast
仅适用于相关类型(例如类及其子类)。请参阅:http://www.cplusplus.com/doc/tutorial/typecasting/。[bits()](http://doc.qt.nokia.com/4.7/qimage.html#bits)返回指向第一个像素数据的指针,并且如我之前所说,我假设图像以32bpp格式存在,因此将其转换为QRgb*是安全的,实际上是必需的,因为[scanline()](http://doc.qt.nokia.com/4.7/qimage.html#scanLine)的描述已经解释了这一点。 - przemocQImage
的格式具有 Alpha 通道,则您的 QImage
将具有 Alpha 通道。QImage::createAlphaMask()
生成 Alpha 掩码并检查其像素值。