参见英文答案 >
How to insert image into database using TADOQuery Component Only2个
> Store images in MS-Access Database using Delphi61个
我正在使用此代码将图像加载到我的Timage中:
图像是.jpeg格式
> Store images in MS-Access Database using Delphi61个
我正在使用此代码将图像加载到我的Timage中:
begin if OpenPictureDialog1.Execute(Self.Handle) then Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName); end;@H_301_6@然后我使用此代码存储到我的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;@H_301_6@但现在我想在Timage上显示这些保存的图像,任何人都可以帮助我吗?
图像是.jpeg格式
解决方法
至于TPicture无法决定它必须为加载创建哪种TGraphic,因为流不具有像文件名这样的扩展名,你必须决定它,并分配Graphic.
在这种情况下,图片的TJPEGImage.
存储与图像数据的简单存储不兼容,因为存储有关thenformaformat的信息也是如此,以便能够创建所需的加载类.
在这种情况下,图片的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;@H_301_6@以下单元能够在blobfields中存储不同的图形格式.
存储与图像数据的简单存储不兼容,因为存储有关thenformaformat的信息也是如此,以便能够创建所需的加载类.
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.