Load image from embedded resource

流过昼夜 提交于 2020-06-25 08:37:43

问题


I am trying to assign an image(Image1) a picture at Run-time.

Since I can't set a property to load from resource. So I need to load at run time.

I have the code

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;

But it just loads the forms with a blank Image. aswell as:

procedure TForm1.FormCreate(Sender: TObject);
BitMap1 : TBitMap;
begin
BitMap1 := TBitMap.Create;
BitMap1.LoadFromResourceName(HInstance,'Live');
image1.Picture.Bitmap.Assign(Bitmap1);
end;

I have no idea if the bottom one would work at all, guess not. Just something I tried.

Resource and Image


回答1:


I just added a resource named SampleBitmap (a bitmap image) to a new VCL project. Then I added a TImage control, and gave it an OnClick handler:

procedure TForm1.Image1Click(Sender: TObject);
begin
  Image1.Picture.Bitmap.LoadFromResourceName(HInstance, 'SampleBitmap');
end;

It works perfectly.

Update

The problem is most likely that you are using a JPG image, and not a Bitmap. You cannot load a JPG image into a TBitmap. So, what to do? Well, add JPEG to your uses clause, and do

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;



回答2:


Load it directly into a TBitmap instead, like you tried:

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

Compile it:

C:\YourResFolder\Brcc32 MyResource.rc MyResource.res

or in later versions of Delphi:

{$R MyResource.res MyResource.rc}

Use it:

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;


来源:https://stackoverflow.com/questions/5805372/load-image-from-embedded-resource

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!