Image 从嵌入式资源加载图像

Image 从嵌入式资源加载图像,image,delphi,resources,embedded-resource,Image,Delphi,Resources,Embedded Resource,我试图在运行时为图像(Image1)分配一张图片 因为我无法设置要从资源加载的属性。所以我需要在运行时加载 我有密码 procedure TForm1.FormCreate(Sender: TObject); var RS:Tresourcestream ; begin RS := TResourceStream.Create(HInstance,'Splashscreen_Background', RT_RCDATA); image1.Picture.Bitmap.LoadFrom

我试图在运行时为图像(Image1)分配一张图片

因为我无法设置要从资源加载的属性。所以我需要在运行时加载

我有密码

procedure TForm1.FormCreate(Sender: TObject); 
var RS:Tresourcestream ; 
begin 
RS := TResourceStream.Create(HInstance,'Splashscreen_Background', RT_RCDATA);   
image1.Picture.Bitmap.LoadFromResourcename(HInstance,'splashscreen_background'); 
end;
但它只是加载带有空白图像的表单。以及:

procedure TForm1.FormCreate(Sender: TObject);
BitMap1 : TBitMap;
begin
BitMap1 := TBitMap.Create;
BitMap1.LoadFromResourceName(HInstance,'Live');
image1.Picture.Bitmap.Assign(Bitmap1);
end;
我不知道最下面的那个能不能用,我猜不行。我试过了


我刚刚在一个新的VCL项目中添加了一个名为
SampleBitmap
(位图图像)的资源。然后我添加了一个
TImage
控件,并给它一个
OnClick
处理程序:

procedure TForm1.Image1Click(Sender: TObject);
begin
  Image1.Picture.Bitmap.LoadFromResourceName(HInstance, 'SampleBitmap');
end;
它工作得很好

更新

问题很可能是您使用的是JPG图像,而不是位图。无法将JPG图像加载到
TBitmap
中。那么,该怎么办?那么,将
JPEG
添加到
uses
子句中,然后

procedure TForm5.Image1Click(Sender: TObject);
var
  RS: TResourceStream;
  JPGImage: TJPEGImage;
begin
  JPGImage := TJPEGImage.Create;
  try
    RS := TResourceStream.Create(hInstance, 'JpgImage', RT_RCDATA);
    try
      JPGImage.LoadFromStream(RS);
      Image1.Picture.Graphic := JPGImage;
    finally
      RS.Free;
    end;
  finally
    JPGImage.Free;
  end;
end;

将其直接加载到
TBitmap
中,就像您尝试的那样:

// Create your resource like this:
// MyResource.rc
SPLASHBKGND BITMAP YourSplashscreen.bmp
编译它:

C:\YourResFolder\Brcc32 MyResource.rc MyResource.res
或在Delphi的更高版本中:

{$R MyResource.res MyResource.rc}
使用它:

procedure TForm1.FormCreate(Sender: TObject);
var
  Bmp: TBitmap;
begin
  Bmp := TBitmap.Create;
  try
    Bmp.LoadFromResourceName(HInstance, 'SPLASHBKGND');
    Image1.Picture.Assign(Bmp);
  finally
    Bmp.Free;
  end;
end;

我不认为我的简单方法有任何问题。@Andreas:没有说有。:)当你的答案出现的时候,我的答案就在路上;我只是继续发布了一个备选方案。@肯:我很确定我已经找到了问题所在。OP尝试将JPG图像加载到
TBitmap
中。无法工作…@Ken如果资源链接到此代码所在的库或包中,则MainInstance是错误的。建议应该是use MainInstance或HInstance,以引用具有资源的模块的为准。我只会使用HInstance,因为我只会从链接到的同一个模块加载资源。当然,我更喜欢Andreas更简洁的方法,对于replyInteresting,TYVM,加载时不会发生任何事情,但单击后会发生。但是onclick事件(与您的事件相同,我确实更改了资源名称)返回一个错误,表示它找不到资源。@Skeela87:上面的示例是为了执行onclick,而不是onload。我刚刚给了你加载图像的代码。将代码放置在代码中正确的位置取决于您。此外,
SampleBitmap
JpgImage
是示例中资源的名称。在你的例子中,资源被称为
Splashscreen\u Background
。是的,我知道了,我在你原来的帖子上发表了我的评论。但这很好,泰文。我确实加载了一个JPG,我没有意识到,我自己更像是一个VB人。@Uwe:噢,
中的bug最后是一个很酷的bug!谢谢你纠正它!