Delphi>我可以在我的单元(而不是dfm)中存储位图的数据吗?

Ric*_*olf 1 delphi components

我在一个单元中声明了一个类,它需要使用特定的位图.它在我的测试单元的DFM中声明如下:

  object ImgTop: TImage
    Left = 208
    Top = 568
    Width = 777
    Height = 41
    Picture.Data = {
      0A544A504547496D616765A1CF0000FFD8FFE000104A46494600010101025802
      [truncated]
      };
Run Code Online (Sandbox Code Playgroud)

但在我的最后一个单元中,我不会有dfm.那么有什么方法可以在我的单位中声明它?

===

谢谢,我现在似乎已经开始工作,关于位图的大小限制很可怜:(这就是我所做的:

在我的文件夹中是这些文件:

imgleft.bmp
imgtop.bmp
Run Code Online (Sandbox Code Playgroud)

这是我的名为ScanOCRres.rc的资源文件:

1 RT_BITMAP "imgtop.bmp"
2 RT_BITMAP "imgleft.bmp"
Run Code Online (Sandbox Code Playgroud)

我已将其设置为使用C:\ Program Files\Borland\Delphi 7\bin\brcc32.exe自动执行

它生成了该文件

ScanOCRres.RES
Run Code Online (Sandbox Code Playgroud)

在我的单位,我有实施

{$R *.dfm}
{$R ScanOCRres.RES}
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

var
  abmp : TBitmap;
begin
  abmp := TBitmap.create;
  abmp.LoadFromResourceID(SysInit.HInstance, 1);
  abmp.free;
end;
Run Code Online (Sandbox Code Playgroud)

我在LoadFromResourceID行上收到此错误消息:

项目Project1.exe引发了异常类EAccessViolation,并在模块"Project1.exe"中显示了"地址为0040A2C8的访问冲突"消息.读取地址00000001 '

Rob*_*edy 7

可以把它放在你的代码中,但使用起来不太方便.声明一个字节数组并定义图像的每个字节.祝你好运.要加载它,我将字节数组包装成a TMemoryStream然后使用LoadFromStream.

更好的方法是将图像存储在资源中.编写这样的资源脚本文件:

1 RT_BITMAP "foo.bmp"
Run Code Online (Sandbox Code Playgroud)

.rc文件添加到Delphi项目中,它将自动链接到您的程序.在运行时,使用以下命令加载图像TBitmap.LoadFromResourceId:

var
  b: TBitmap;
begin
  b := TBitmap.Create;
  b.LoadFromResourceId(SysInit.HInstance, 1);
Run Code Online (Sandbox Code Playgroud)