如何用摄像头拍登记照?(100分)

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

hhzxedu

Unregistered / Unconfirmed
GUEST, unregistred user!
网上关于用摄像头捕捉bmp图片的例子很多,可是拍下来的图片一般都是标准的320*240,640*480大小,如果我想捕捉一个140*100这样自定义大小的图片,该如何做?

我看到自修考试注册报名的程序是这样的,用摄像头对着人头部,然后直接点保存就可以了,拍子下来的就是一个标准的登记照大小的图片了。想学学!
 
有个videocap的控件,可以操作摄像头,实现拍照

图片缩放你可以搜索一下,有很多算法
 
不是图片缩放,而是从摄像头的区域中捕捉一块自定义大小的图片出来,我看到仁爱医院体格检查系统中也有这个功能,可惜是VB的。下面是VB的那个:
http://www.mndsoft.com/blog/article.asp?id=1021
 
做法:
1、抓动态视频保存为BMP(临时文件)
2、显示BMP
3、根据鼠标位置和目标大小画一个矩形框预览目标图形(所谓的橡皮筋线),此步也可省略
4、保存时从预览复制CopyRect部分图形,然后保存

下面代码是从我的程序中摘录的,供你参考

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
MyRect, MyOther: TRect;
begin
MyRect := Rect(x,y,x+image2.Width ,y+image2.Height);
MyOther:=Rect(0,0,image2.Width ,image2.Height);
image2.Picture:=nil;
image2.Canvas.CopyRect(MyOther,image1.Picture.Bitmap.Canvas,MyRect);
end;


procedure TForm1.Button3Click(Sender: TObject);
var
JPEGImage: TJPEGImage;
begin
//直接保存会出现错误:
//'project raised exception class EJPEG with
// message 'JPEG error #53'. Process stopped.'
//分析应为保存的jpg文件格式有问题,无法预览
//官方说法是: 53 cstrJERR_OUT_OF_MEMORY
// 'Insufficient memory (case %d)'
if SavePictureDialog1.InitialDir='' then
SavePictureDialog1.InitialDir:=ExtractFilePath(OpenPictureDialog1.FileName);
if trim(LabeledEdit1.Text)<>'' then
SavePictureDialog1.FileName:=trim(LabeledEdit1.Text)+'.jpg';
if SavePictureDialog1.execute then
begin
JPEGImage:=TJPEGImage.Create;
JPEGImage.Assign(image2.Picture.Graphic);
JPEGImage.SaveToFile(ExtractFilePath(SavePictureDialog1.Filename)+trim(LabeledEdit1.Text)+'.jpg');
end;
end;
 
谢谢lps给的例子,就是这种效果,不过希望能将你第三步,即在临时bmp上显示一个矩形虚线框来框定要最终保存的区域这段代码也学习一下最好了。希望可以帖子上来让我学习一下,谢谢了!
 
请参考这个(橡皮筋这部分我的代码中省了)
http://www.delphibbs.com/delphibbs/dispq.asp?lid=180398
 
后退
顶部