W wang_cai1 Unregistered / Unconfirmed GUEST, unregistred user! 2007-07-09 #1 我的程序使用alphablend函数将内存中创建的HDC叠加至屏幕时,在屏幕32位色的情况下正常,但当屏幕颜色改为16位色时程序就不显示了,请问是怎么回事,用Bitblt正常,是不是屏幕在16位色的情况下,alphablend函数无效?
我的程序使用alphablend函数将内存中创建的HDC叠加至屏幕时,在屏幕32位色的情况下正常,但当屏幕颜色改为16位色时程序就不显示了,请问是怎么回事,用Bitblt正常,是不是屏幕在16位色的情况下,alphablend函数无效?
Y yayongm Unregistered / Unconfirmed GUEST, unregistred user! 2007-07-16 #2 我刚刚帮你测试了一下,16色下可用.我的配置为:IBM Thinkpad R51e 1483
W wang_cai1 Unregistered / Unconfirmed GUEST, unregistred user! 2007-07-22 #3 to yayongm:你怎么叠加的,能看看你的原码吗?
L lovezyp Unregistered / Unconfirmed GUEST, unregistred user! 2007-07-25 #4 奇怪,不知楼上怎么做到的,只有24位真彩色以上才会支持alpha通道,16位根本不支持,这是和颜色深度有关的,和硬件没有关系
M Miros Unregistered / Unconfirmed GUEST, unregistred user! 2007-07-29 #7 由于AlphaBlend 只能在32Bit的DC上进行 所以当桌面是非32位时直接在窗口的DC上Blend会失败 所以先创建一个32位的位图 var mem32bmp:TBitmap; Sourcebmp:TBitmap; begin mem32bmp:= TBitmap.Create; mem32bmp.pixelFormat := pf32bit; AlphaBlend(...); 将原图象 Blend到内存中的32位的DC mem32bmp里 再将mem32bmp Draw到你的目标画布上 DestCanvas.Draw(mem32bmp); mem32Bmp.Free; end;
由于AlphaBlend 只能在32Bit的DC上进行 所以当桌面是非32位时直接在窗口的DC上Blend会失败 所以先创建一个32位的位图 var mem32bmp:TBitmap; Sourcebmp:TBitmap; begin mem32bmp:= TBitmap.Create; mem32bmp.pixelFormat := pf32bit; AlphaBlend(...); 将原图象 Blend到内存中的32位的DC mem32bmp里 再将mem32bmp Draw到你的目标画布上 DestCanvas.Draw(mem32bmp); mem32Bmp.Free; end;