已经实现了抓取摄像头的图像,并存为缩小的jpg图片,但是怎么实现一按下“捕捉图片”的按钮后就可以每隔10秒刷新捕捉的图像,在按下就可以停止呢?我没用过线程和定时器,所以麻烦各位说的清除些,我下面的代码用了sleep(5000),估计sleep把整个程序组塞了,造成了假死的现象procedure TForm1.Button3Click(Sender: TObject);
var
jpg :TJpegImage;
bmp :TBitMap;
name:String;
nameid:String;
tmp:String;
begin
name:=ComboBox1.Text;
nameid:=IntToStr(ComboBox1.ItemIndex+1);
while(true) do
begin
if hWndC <> 0 then begin
SendMessage(hWndC,WM_CAP_SAVEDIB,0,longint(pchar(nameid+'.bmp')));
// jpg.Create;
jpg:=TJpegImage.Create;
bmp:=TBitMap.Create;
bmp.LoadFromFile(nameid+'.bmp');
bmp.Canvas.Brush.Style := bsClear;
bmp.Canvas.Font.Color := clRed;
bmp.Canvas.Font.Size := 20;
bmp.Canvas.Font.Name:='宋体';
bmp.Canvas.Font.Size:=9;
bmp.Canvas.TextOut((bmp.Width div 2 - 30),(0),name); bmp.Canvas.TextOut(0,(bmp.Height-10),DateTimeToStr(Now)); image2.Picture.Bitmap.Assign(bmp);
jpg.Assign(bmp);
jpg.SaveToFile(nameid+'a.jpg');
jpg.Free;
bmp.Free;
jpg:= StretchImagePercent(nameid+'a.jpg',50,100);
jpg.SaveToFile(nameid+'.jpg');
jpg.Free;
end;
sleep(5000);
end;
end;
var
jpg :TJpegImage;
bmp :TBitMap;
name:String;
nameid:String;
tmp:String;
begin
name:=ComboBox1.Text;
nameid:=IntToStr(ComboBox1.ItemIndex+1);
while(true) do
begin
if hWndC <> 0 then begin
SendMessage(hWndC,WM_CAP_SAVEDIB,0,longint(pchar(nameid+'.bmp')));
// jpg.Create;
jpg:=TJpegImage.Create;
bmp:=TBitMap.Create;
bmp.LoadFromFile(nameid+'.bmp');
bmp.Canvas.Brush.Style := bsClear;
bmp.Canvas.Font.Color := clRed;
bmp.Canvas.Font.Size := 20;
bmp.Canvas.Font.Name:='宋体';
bmp.Canvas.Font.Size:=9;
bmp.Canvas.TextOut((bmp.Width div 2 - 30),(0),name); bmp.Canvas.TextOut(0,(bmp.Height-10),DateTimeToStr(Now)); image2.Picture.Bitmap.Assign(bmp);
jpg.Assign(bmp);
jpg.SaveToFile(nameid+'a.jpg');
jpg.Free;
bmp.Free;
jpg:= StretchImagePercent(nameid+'a.jpg',50,100);
jpg.SaveToFile(nameid+'.jpg');
jpg.Free;
end;
sleep(5000);
end;
end;
解决方案 »
- 关于获取 mpeg 视频文件 缩略图 以及 播放列表显示问题
- 关于2009版流的问题
- ADO连接数据库,如何获得局域网内的数据库服务器和服务器上的数据库名称
- delphi的输出调试信息用出什么语句?
- Delphi中,ADODataSet与ADOQuery有什么区别啊?
- 关于Tchart的资料哪里能找到啊?
- tidtcpserver在事件onexecute中,同步的问题? 急!!
- 请问DEPHLI对网络的底层操作功能如何?
- 在fastreport里面设计好一个报表,我要让他在预览的时候可以看见,但是打印的时候看不见怎么办?
- 在delphi的文件操作中,如何将dbf文件中的数值型字段正确读出?
- 一个窗体创建和释放的问题。请赐教
- 如何用idUDPClient把图片流发送到另一台机器上。
Procedure Delay(Msecs:Integer);
var FirstTickCount : real;
begin
FirstTickCount := GetTickCount;
Repeat
Application.ProcessMessages;
Until ((GetTickCount - FirstTickCount) >= LongInt (Msecs));
end;用这个延时看看。
ENABLE := True启动
ontimer事件中写抓图函数。
试试就知道效果了。
ENABLE := False停止