繁体   English   中英

从资源加载 Gif 图片

[英]Loading Gif Picture From Resources

我想将动画 .Gif 图片从 .Res 文件加载到 TImage 中,但 TImage 仅为 MyImage.Picture .Bitmap 准备 LoadFromResourceName() 函数。 我写了一个简单的代码如下

procedure TForm2.FormCreate(Sender: TObject);
Var
  MyImage:TImage;
begin
  MyImage:=TImage.Create(Self);
  MyImage.Parent:=Self;
  MyImage.AutoSize:=True;
  MyImage.Picture.LoadFromFile('H:\Component\Automation\Test\Animation\TL.Gif');
  MyImage.Top:=0;
  MyImage.Left:=0;
  MyImage.Visible:=True;
  MyImage.Transparent:=True;
 ( MyImage.Picture.Graphic as TGIFImage ).Animate := True;
 ( MyImage.Picture.Graphic as TGIFImage ).AnimationSpeed:= 100;
end;

它工作正常。 现在,当我想从 .Res 文件加载 .Gif 图片时该怎么办?

  1. 包括gifimg单元在至少一种uses在你的程序条款。
  2. 将映像作为资源链接到可执行文件。
  3. 将资源加载到TResourceStream对象中。
  4. 创建一个TGifImage对象,并通过调用LoadFromStream()将图像从第3步传递到其中,并将图像加载到其中。
  5. TGifImage对象分配给TImage.Picture属性。

如果此问题与缺少的LoadFromResourceName()过程有关,请使用此类帮助程序(添加此单元)为TGifImage添加缺少的过程:

unit Mv.VCL.Helper.Imaging;

interface

uses
    VCL.Imaging.GifImg;

type
    TGifImageHelper = class helper for TGifImage
        procedure LoadFromResourceName(AInstance: HInst; const AName: string);
    end;


implementation

uses
    System.SysUtils,
    System.Classes,
    WinApi.Windows;     //RT_RCDATA


procedure TGifImageHelper.LoadFromResourceName(AInstance: HInst; const AName: string);
var
    ResStream: TResourceStream;
begin
    try
        ResStream := TResourceStream.Create(AInstance, AName, RT_RCDATA);
        try
            LoadFromStream(ResStream);
        finally
            ResStream.Free;
        end;
    except on E: Exception do
        begin
            E.Message := 'Error while loading GIF image from resource: ' + E.Message;
            raise;
        end;
    end;
end;

end.

这解决了@Davids 回答中的第 3 点和第 4 点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM