屏幕在16位色的情况下,alphablend函数是不是无效? ( 积分: 100 )

  • 主题发起人 主题发起人 wang_cai1
  • 开始时间 开始时间
W

wang_cai1

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序使用alphablend函数将内存中创建的HDC叠加至屏幕时,在屏幕32位色的情况下正常,但当屏幕颜色改为16位色时程序就不显示了,请问是怎么回事,用Bitblt正常,是不是屏幕在16位色的情况下,alphablend函数无效?
 
我刚刚帮你测试了一下,16色下可用.我的配置为:IBM Thinkpad R51e 1483
 
to yayongm:你怎么叠加的,能看看你的原码吗?
 
奇怪,不知楼上怎么做到的,只有24位真彩色以上才会支持alpha通道,16位根本不支持,这是和颜色深度有关的,和硬件没有关系
 
不知道解决了有没有分拿,有才回复[:D][:D]
 
由于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;
 
这是跟硬件有关的。
 
后退
顶部