在RGB模式下,alpha原理公式:displayColor = sourceColor × alpha / 255 + backgroundColor × (255 – alpha) / 255。
假如不带alpha通道的自定义32位位图,如果不使用alpha通道,测计算结果是黑色的。因此只要保证最高8位为1即可,即
newSourceColor = 0xff000000 | sourceColor ;
下面是处理自定义位图透明过程函数:
void DrawBitmap(QPainter *pDC, int nLeft, int nTop,
int width, int height,
DWORD *bitmap, COLORREF clrBack)
{
DWORD dwLoopY = 0, dwLoopX = 0;
COLORREF crPixel = 0;
BYTE byNewPixel = 0;
int r, g, b;
QRect rect(nLeft, nTop, width, height);
QImage imgAlpha((const uchar *)bitmap, width, height, QImage::Format_ARGB32);
r = GetRValue(clrBack);
g = GetGValue(clrBack);
b = GetBValue(clrBack);
for (dwLoopY = 0; dwLoopY < height; dwLoopY++)
{
for (dwLoopX = 0; dwLoopX < width; dwLoopX++)
{
QRgb rgb = imgAlpha.pixel(dwLoopX, dwLoopY);
QRgb rgbMask = qRgb(r, g, b);
if (rgb == rgbMask)
{
imgAlpha.setPixel(dwLoopX, dwLoopY, Qt::transparent);
}
}
}
pDC->drawImage(rect, imgAlpha);
}