DBImage 使用 Jpeg 图片(VCL)

来源:互联网 发布:富豪 面相 知乎 编辑:程序博客网 时间:2024/05/24 07:04

Delphi 的 DBImage 只支持 BMP 格式的图片。如果在数据库的 Blob 字段里面存储 BMP 图片,则 DBImage 可以自动显示图片。如果在 Blob 字段里面存储 Jpg 图片,则打开数据库的时候,如果绑定了一个 DBImage 到该字段,会报异常。


要让 DBImage 支持 JPEG,其核心是:TWICImage.

TWICImage 是 Delphi 10 以来新增加的一个类,在 Vcl.Graphics; 单元里面。这个类支持各种图片格式,包括 gif, png, jpg 等等。


Danny Wind 有两篇文章和一个 Demo 代码演示了如何使用 TWICImage 来达到让 Image 显示 JPG 图片的效果:


文章一


文章二


---------------

核心代码:

{Display info from image inside Blob}procedure TFormMain.DisplayPictureInfo(Field: TBlobField);var  lWICImage: TWICImage;begin  MemoMain.Lines.Add('======================');  if (Field.BlobSize > 0) then  begin {Assume image}    lWICImage := TWICImage.Create;    try      lWICImage.Assign(Field);      MemoMain.Lines.Add('Picture inside BlobField:');      MemoMain.Lines.Add('Size = ' + Field.BlobSize.ToString + ' bytes');      MemoMain.Lines.Add('Format = ' + GetEnumName(TypeInfo(TWICImageFormat),Integer(lWICImage.ImageFormat)));    finally      lWICImage.Free;    end;  end  else {Empty}  begin    MemoMain.Lines.Add('No picture, Blob is Empty');    MemoMain.Lines.Add('Click on image to add a picture.');  end;end;


{TWICImage can determine image type from the header that was saved into the Blob. Note: TWICImage requires WIndows-XP SP3 and Delphi-2010.}procedure TFormMain.LoadPictureFromField(Field: TBlobField; Picture: TPicture);var  lWICImage: TWICImage;begin  if (Field.BlobSize > 0) then  begin {Assume image}    lWICImage := TWICImage.Create;    try      lWICImage.Assign(Field);      Picture.Assign(lWICImage);    finally      lWICImage.Free;    end;  end  else {Empty}  begin    Picture.Assign(nil);  end;end;

上述函数的 Picture 来自一个 Image。因此就可以在一个 TImage 里面显示来自数据库字段的图片了。要让它自动显示,在 DataSource.OnDataChange 事件里面调用这个方法。

0 0
原创粉丝点击