save jpeg into database and read from database.txt

来自「Delphi编程练习:在数据库中以文件流形式保存JPEG图片。」· 文本 代码 · 共 52 行

TXT
52
字号
procedure Tfrm_Pic_Adm.btn_Load_Picture01Click(Sender: TObject);
var
  pics:TStream;
  Jpeg:TJpegImage;
  bmp:TBitMap;
begin
// uses JPEG;
  if not OpenPictureDialog1.Execute() then exit;
  ibQry_Pic_Code.Edit;
  Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
  pics:=TMemoryStream.Create;
  bmp:=TBitMap.Create;
  bmp.Width:=Image1.Picture.Width;//指定长度与宽度
  bmp.Height:=Image1.Picture.Height;
  bmp.Canvas.Draw(0,0,Image1.Picture.Graphic);
  //注意此句,这是与其它方法不同的地方,之所以能实现存储所有操作系统能识别的图片格式,原因就在此处:采用了截图方式。
  Jpeg:=TjpegImage.Create;
  Jpeg.CompressionQuality:=80;
  jpeg.Assign(bmp);
  jpeg.Compress;//压缩为JPEG格式
  jpeg.SaveToStream(pics);//存入内存流
  pics.Position:=0;
  TBlobField(ibQry_Pic_Code.FieldByName('PIC_BLOB')).LoadFromStream(pics);//数据库从流中接受数据
  //ibQry_Pic_Code.Post;//不自动保存
  pics.Free;
  jpeg.Free;
  bmp.Free;

end;

procedure Tfrm_Pic_Adm.ibQry_Pic_CodeAfterScroll(DataSet: TDataSet);
var
  pics:TStream;
  Jpeg:TJpegImage;
begin

  //读取图片
  if TBlobField(ibQry_Pic_Code.FieldByName('PIC_BLOB')).value='' then
  begin
    Image1.Picture:=nil;
    exit;
  end;
  pics:=TMemoryStream.Create;
  TBlobField(ibQry_Pic_Code.FieldByName('PIC_BLOB')).SaveToStream(pics);//将二进制存入内存流
  pics.Position:=0;
  Jpeg:=TJpegImage.Create;
  Jpeg.LoadFromStream(pics);//将流识别为JPEG格式
  Image1.Picture.Assign(jpeg);
  pics.Free;
  jpeg.Free;
  
end;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?