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?