Bitmap.Canvas上反复绘制图像问题。救命呀!!!!(100分)

  • 主题发起人 主题发起人 happycyp
  • 开始时间 开始时间
H

happycyp

Unregistered / Unconfirmed
GUEST, unregistred user!
这两天在做视频卡抓取图像的程序,遇取了下面的问题。
思路如下,从视频卡上以场模式抓取一帧图片,将其从内存中取出来绘制到BitMap对象上,因为其是正常图像高度的一半,将其进行拉伸再绘制到另一个BitMap对像上。待保存两帧这样的图像后进行比较,如果变化超过一定范围,则保存一帧图片,代码如下:
function Draw1(nNumber: Integer): boolean;
var
MemHandle: LongWord;
LineAddr: PChar;
begin
try
CGStaticMemLock(Longword(nNumber) * BufLength, BufLength, MemHandle, LineAddr);
CGDataTransform(pBuffer1, LineAddr , OUTPUT_WINDOW_WIDTH, OUTPUT_WINDOW_HEIGHT, 16, True); //以上上视频卡的API将图像保存到内存中。
BmpInfo1[Order[0]].biBmp.Canvas.FillRect(Rect(0,0,OUTPUT_WINDOW_WIDTH, OUTPUT_WINDOW_HEIGHT)); //清空图片,以白色填充。好像不管用
SetDIBitsToDevice(BmpInfo1[Order[0]].biBmp.Canvas.Handle, 0, 0, BmpInfo1[Order[0]].biBmp.Width, BmpInfo1[Order[0]].biBmp.Height,
0, 0, 0, pBMIInfo^.bmiHeader.biHeight,
pBuffer1, pBMIInfo^, DIB_RGB_COLORS);
CG_VERIFY(CGStaticMemUnlock(MemHandle));
(*程序思路:Order[0]里两次执行后,分别存放0和1表示当前执行的次数,保存两次后,将对比图像的变化*)
BmpInfo1_Save[Order[0]].biBmp.Canvas.FillRect(ARect);//清空图片,以白色填充。好像不管用
SetStretchBltMode(BmpInfo1_Save[Order[0]].biBmp.Canvas.Handle, HALFTONE);
StretchBlt(BmpInfo1_Save[Order[0]].biBmp.Canvas.Handle,0,0,OUTPUT_PIC_WIDTH, OUTPUT_PIC_HEIGHT,
BmpInfo1[Order[0]].biBmp.Canvas.Handle, 0,0,OUTPUT_WINDOW_WIDTH,OUTPUT_WINDOW_HEIGHT,
SRCCOPY);
BmpInfo1_Save[Order[0]].biDateTime := GetDateTime;
if Order[0] = 1 then
begin
if ScanFrame(BmpInfo1_Save[1], BmpInfo1_Save[0], 0) then
begin
ResetEvent(hCarEvent[0]);
WaitForSingleObject(hCarEvent[0],ScanTimeStop);
end;
Order[0] := 0;
end else
if Order[0] = 0 then Order[0] := 1;
Result := true;
except on E: Exception do begin
SaveLog('Draw1:' + E.Message);
Result := False;
end;
end;
end;
如此反复进行操作,发现图片会进行叠加。
不知道怎么修改了,请高手指点一二。在此谢过了。
 
abitmap.FreeImage;?
 
我是初学者
赞成楼上的,每次操作完释放
 
代码很乱,应该把你要问的问题摘出来,不用把采集过程也放出来吧,谁有空看那个?
清空图片,以白色填充。只要这样做就可以了:
Bitmap.Canvas.Brush.Color := clWhite;
Bitmap.Canvas.FillRect(R);
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
645
import
I
I
回复
0
查看
782
import
I
后退
顶部