之前我写了如何从数据库里读取图像数据并用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;