我已經創建了32位DIB部分,填充一些非零值(FillMemory)並使用GDI函數對其進行繪製。 我已經看過DIB部分的內存,並且看到每個第4個字節(alpha通道)現在都有一個0。 幾年前,我曾解釋過這種行爲,但沒有找到答案(也不能記得GDI爲何如此行事)。 有人知道爲什麼它的GDI函數將alpha通道設置爲0?有沒有這種行爲的規範?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函數將α設置爲0.我想確定它是「合法行爲」。
其實我使用DIB部分來獲得透明度。但AlphaBlend將所有繪製的對象視爲透明對象,因爲GDI函數將alpha通道設置爲0. – sibvic
@sibvic是的,GDI將它們設置爲0,因爲在GDI文檔中,這些位爲0(它們不是alpha通道位)直到今天。 –