如何将TImage里的图片另存为BMP、JPG、PNG格式的文件

之前我写了如何从数据库里读取图像数据并用Image控件显示,现在讲讲如何另存为图像文件。

procedure TForm_ShowPic.N1Click(Sender: TObject);
var
  vPng:TPNGObject;
  vJpg:TJPEGImage;
  vBmp:TBitmap;
  vTmp:string;
  FType:Integer;
  vStream:TStream;
begin
  with SaveDialog1 do
  begin
    if not Execute then Exit;    
    FType:=-1;                  
    vTmp:=ExtractFileExt(FileName);   //分析用户保存的图像类型
    if vTmp='.png' then
      FType:=0
    else
    if vTmp='.jpg' then
      FType:=1
    else
    if vTmp='.bmp' then
      FType:=2;
    vTmp:=FileName;   //这是文件路径
  end;
  try
    if FType=-1 then  //默认是bmp
      FType:=2;
    vStream:=TMemoryStream.Create;   //创建流
    ImageShow.Picture.Graphic.SaveToStream(vStream); 将Image里的图像读到流里
    if vStream.Size=0 then  //判断有没有图像 
    begin
      FreeAndNil(vStream);
      ShowMessage('没有图像!');
      Exit;
    end;
    vStream.Position:=0;  //移动到流的开头,不要少了这步
    if FType=0 then  //保存成Png 文件
    begin
      vPng:=TPNGObject.Create;
      vPng.LoadFromStream(vStream); 
      vPng.SaveToFile(vTmp);
      FreeAndNil(vPng);

    end;
    if FType=1 then  //保存成jpg文件
    begin
      vJpg:=TJPEGImage.Create;
      vBmp:=TBitmap.Create;  //先创建一个bmp
      vBmp.Assign(ImageShow.Picture.Graphic);  //把Image里的图像读到bmp里

      vJpg.Assign(vBmp);  //在这里将bmp的图像转成jpg
      vJpg.SaveToFile(vTmp);
      FreeAndNil(vBmp);
      FreeAndNil(vJpg);
    end;
    if FType=2 then   //保存成bmp文件
    begin
      ImageShow.Picture.Graphic.SaveToFile(vTmp);  //bmp的最简单,直接另存为就好
    end;
    FreeAndNil(vStream);
  except
    on E:Exception do
    begin
      MessageDlg('图像保存失败!原因是:'+#13+E.Message,mtWarning,[mbOK],0);
      Exit;
    end;
  end;
end;

猜你喜欢

转载自blog.csdn.net/victor_yang/article/details/88818741