On 3/4/20 12:42 PM, Ziqing Hui wrote:
- has_alpha = FALSE;
- if (bmp.bmBitsPixel == 32)
- {
for (pixel = bits; pixel < bits + cx * cy; pixel++)
{
if ((*pixel >> 24) != 0)
{
has_alpha = TRUE;
break;
}
}
- }
- if (has_alpha)
- {
/* gray the src image */
for (pixel = bits; pixel < bits + cx * cy; pixel++)
{
DWORD alpha = (*pixel >> 24) & 0x000000ff;
DWORD red = (*pixel >> 16) & 0x000000ff;
DWORD green = (*pixel >> 8) & 0x000000ff;
DWORD blue = (*pixel) & 0x000000ff;
DWORD gray = (red * 299 + green * 587 + blue * 114) / 1000;
gray = gray * alpha / 0xff;
*pixel = ((alpha << 24) | (gray << 16) | (gray << 8) | gray);
}
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0;
bf.SourceConstantAlpha = 0xff;
bf.AlphaFormat = AC_SRC_ALPHA;
GdiAlphaBlend(hdc, x, y, cx, cy, hdcImage, 0, 0, cx, cy, bf);
goto done;
- }
I think it's possible ILS_SATURATE should be used for that. Have you checked rendering on Windows with this flag?