双缓冲和透明拷贝问题,请大虾赐教!
目前在做一个视频捕捉的程序,得到摄像头每一帧画面之后画到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来绘制又会覆盖前面绘制的摄像头画面。请大虾给个例子看看,非常感谢!