我创建了 32 位 DIB 部分,用一些非零值 (FillMemory) 填充它并使用 GDI 函数对其进行绘图。我查看了 DIB 部分的内存,发现现在每个第 4 个字节(alpha 通道)都有一个 0。几年前我对这种行为有过解释,但没能再次找到它(并且不记得为什么 GDI 会那样做)。有人知道为什么 GDI 函数将 alpha 通道设置为 0 吗?这种行为有什么规范吗?
这个想法是这样的:
dib = CreateDIBSection(hdc..., &bytes);
FillMemory(bytes,...255);
memdc = CreateCompatibleDC(hdc);
SelectObject(memdc, bid);
MoveTo(memdc,...);
LineTo(memdc,...);
// look at every pixel in bytes
// if alpha == 255 then it is undrawn pixel
// and set alpha + premultiply colors otherwise
AlphaBlend(hdc, ... memdc,...);
此代码有效。但它假定 GDI 函数将 alpha 设置为 0。我想确定它是“合法行为”。