我用VideoCap1控件做了个摄像头拍照,拍照的图片会自动生成在程序的根目录“Capture.bmp”,但是我发现这个图片太大了,居然有900K,我想在保存图片的时候把尺寸缩小原来的十分之一,把图片大小控制在90k左右,我改如何实现呢?麻烦各位大哥帮小弟看看,万分感谢!以下是拍照事件的原代码procedure TForm2.Button1Click(Sender: TObject);
Var 
 bmp: TBitmap;
 strfilename:String;
begin
  inherited;
  strfilename:=extractfilepath(Application.ExeName);
  begin
       if not  VideoCap1.SaveAsDIB then
        begin
          ShowMessage('拍摄照片失败');
          Abort;
        end;
  end;

解决方案 »

  1.   

    http://blog.csdn.net/xwchen/article/details/1799037
      

  2.   

    我替你在BAIDU上搜的,应该就是这个,试着改变宽和高(edit1,edit2)看一下文件大小就可以了。
      

  3.   

    bmp是有点大, 你转一下jpg就好了
      

  4.   

    转成JPG格式储存。现成的过程代码发给你:
    Procedure pic_bmptojpg(Const FileName: String;SaveFileName:String='');
    Var
    Bitmap: TBitmap;
    JPeg: TJPegImage;
    Begin
    Bitmap := Nil;
    JPeg := Nil;
    Try
        Bitmap := TBitmap.Create;
        Bitmap.LoadFromFile(FileName);
        JPeg := TJPegImage.Create;
        JPeg.Assign(Bitmap);
        IF Trim(SaveFileName)='' Then
          JPeg.SaveToFile(ChangeFileExt(FileName, '.jpg'))
        Else
          JPeg.SaveToFile(SaveFileName);
    Finally
        FreeAndNil(Bitmap);
        FreeAndNil(JPeg);
    End;
    End;
      

  5.   

    也可以随便在保存成JPG之前,修改分辨率尺寸小一点。
    {********************************************
    描述: 修改bmp文件大小
    参数介绍
    Source:要修改的bmp文件位置(包括路径)
    Dest: 修改后保存的位置。
    X,Y:   修改后的大小
    ********************************************}
    procedure TdqcFunction.Image_FitBitmap(const Source,Dest:string;const x,y:integer);
    var
    abmp,bbmp:tbitmap;
    scalex,scaley:real;
    begin
    abmp:=tbitmap.Create;
    bbmp:=tbitmap.Create;
    try
        abmp.LoadFromFile(Source);
        scaley:=abmp.Height/y;
        scalex:=abmp.Width/x;
        bbmp.Width:=round(abmp.Width/scalex);
        bbmp.Height:=round(abmp.Height/scaley);
        bbmp.PixelFormat:=pfDevice;
        SetStretchBltMode(bbmp.Canvas.Handle,COLORONCOLOR);
        stretchblt(bbmp.Canvas.Handle,0,0,bbmp.Width,bbmp.Height,abmp.Canvas.Handle,0,0,abmp.Width,abmp.Height,srccopy);
        bbmp.SaveToFile(Dest);
    finally
       abmp.Free;
       bbmp.Free;
    end;
    end;