双缓冲和透明拷贝问题,请大虾赐教!

danielfeng 2004-11-03 09:52:45
目前在做一个视频捕捉的程序,得到摄像头每一帧画面之后画到Panel上。
现在已经做好了双缓冲绘制,能够很正常显示画面,不闪烁。代码类似这个样子:

HDCDisplay := GetDC(frmMain.pnlDisplay.Handle);
HDCTemp = CreateCompatibleDC(HDCDisplay);
SelectObject(HDCTemp, ImageID); // ImageID是摄像头捕捉到的画面的Handle
BitBlt(HDCDisplay, 0, 0, CapSize.Width, CapSize.Height, HDCTemp, 0, 0, 13369376);
ReleaseDC(frmMain.pnlDisplay.Handle, HDCDisplay);
DeleteDC(HDCTemp);

现在,需要把一幅BMP绘制到摄像头画面上去。BMP从Resource中Load,设置了透明色,透明色是clFuchsia,目前我就是不清楚如何实现这种透明绘制,也就是说,最终的画面是背后出现摄像头画面,而前景有一点自己画的东西。我直接用Draw会闪烁,如果用BitBlt来绘制又会覆盖前面绘制的摄像头画面。请大虾给个例子看看,非常感谢!
...全文
144 点赞 收藏 7
写回复
7 条回复
lvjun 2005年03月18日
可以用一个bitmap,先将摄像头的数据画在上面,然后再将你的图片透明画在上面,再将此bitmap画到panel上吧,
回复 点赞
caiso 2005年03月16日
顶一下~!!!!!!!!!!!!!!!!!!!!!!
回复 点赞
totem_t 2005年03月15日
我也是同样问题.
在缓冲区绘图后,图片的透明部分依然被绘了出来.

初次调入屏幕时,透明成功.
但后面只要一从缓冲区绘到屏幕上,就不能透明了.
请达人指点.
回复 点赞
caiso 2005年03月15日
顶一下~!~
回复 点赞
bob008 2005年03月15日
setbkmode(hdc,sm_transparent);
.....

brush,style:=bsclear;
....

回复 点赞
zwb666 2004年11月04日
学习
回复 点赞
danielfeng 2004年11月03日
也就是说,需要选择性透明绘制,BMP透明的部分不要画到上面,而不透明的要和摄像头画面合并之后再一起画到Panel上。
回复 点赞
发动态
发帖子
GAME,图形处理/多媒体
创建于2007-08-02

644

社区成员

1.4w+

社区内容

Delphi GAME,图形处理/多媒体
社区公告
暂无公告