delphi – 检索保存在数据库中的图像
发布时间:2020-12-15 10:06:18 所属栏目:大数据 来源:网络整理
导读:参见英文答案 How to insert image into database using TADOQuery Component Only2个 Store images in MS-Access Database using Delphi61个 我正在使用此代码将图像加载到我的Timage中: beginif OpenPictureDialog1.Execute(Self.Handle) thenImage1.Pict
参见英文答案 >
How to insert image into database using TADOQuery Component Only2个
> Store images in MS-Access Database using Delphi61个 我正在使用此代码将图像加载到我的Timage中: begin if OpenPictureDialog1.Execute(Self.Handle) then Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName); end; 然后我使用此代码存储到我的ms访问数据库中: var AStream : TMemoryStream; begin Adotable1.Append; AStream := TMemoryStream.Create; try Image1.Picture.Graphic.SaveToStream(AStream); AStream.Position := 0; if Adotable1.Active then begin TBlobField(Adotable1.FieldByName('Termograma')).LoadFromStream(AStream); end; finally AStream.Free; end; adotable1.Post; 但现在我想在Timage上显示这些保存的图像,任何人都可以帮助我吗? 解决方法
至于TPicture无法决定它必须为加载创建哪种TGraphic,因为流不具有像文件名这样的扩展名,你必须决定它,并分配Graphic.
在这种情况下,图片的TJPEGImage. var JPG:TJPEGImage; ms:TMemoryStream; begin JPG:=TJPEGImage.Create; ms:=TMemoryStream.Create; try TBlobField(AdoTable1.FieldByName('Termograma')).SaveToStream(ms); ms.Position := 0; JPG.LoadFromStream(ms); Image2.Picture.Assign(JPG); finally JPG.Free; ms.Free; end; end; 以下单元能够在blobfields中存储不同的图形格式. unit LoadSaveImageBlobs; // 20120224 by Thomas Wassermann // Adapt. RegisterClasses and uses for your requirements // based on an Idea of Emiliano Sos interface uses Classes,DB,Graphics,Jpeg,PngImage; Procedure SavePicture2Blob(Blob: TBlobField; Picture: TPicture); Procedure LoadPictureFromBlob(Picture: TPicture; Blob: TBlobField); implementation Procedure SavePicture2Blob(Blob: TBlobField; Picture: TPicture); var ms,ms2: TMemoryStream; theClassName: AnsiString; len: Byte; begin ms := TMemoryStream.Create; try Blob.Clear; theClassName := Picture.Graphic.ClassName; len := Length(theClassName); ms.WriteBuffer(len,1); if len > 0 then ms.WriteBuffer(theClassName[1],len); ms2 := TMemoryStream.Create; try Picture.Graphic.SaveToStream(ms2); ms2.Position := 0; if ms2.Size > 0 then ms.CopyFrom(ms2,ms2.Size); finally ms2.Free; end; Blob.LoadFromStream(ms); finally ms.Free; end; end; Procedure LoadPictureFromBlob(Picture: TPicture; Blob: TBlobField); var ms,ms2: TMemoryStream; len: Byte; theClassName: AnsiString; Graphic: TGraphic; GraphicClass: TGraphicClass; begin ms := TMemoryStream.Create; Blob.SaveToStream(ms); ms.Position := 0; try ms.ReadBuffer(len,1); SetLength(theClassName,len); if len > 0 then ms.ReadBuffer(theClassName[1],len); GraphicClass := TGraphicClass(FindClass(theClassName)); if (GraphicClass <> nil) and (len > 0) then begin Graphic := GraphicClass.Create; ms2 := TMemoryStream.Create; try ms2.CopyFrom(ms,ms.Size - len - 1); ms2.Position := 0; Graphic.LoadFromStream(ms2); finally ms2.Free; end; Picture.Assign(Graphic); end; finally ms.Free; end; end; initialization // you might register others if wished RegisterClasses([TIcon,TMetafile,TBitmap,TJPEGImage,TPngImage]); end. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |