Загрузить изображение из встроенного ресурса - PullRequest
10 голосов
/ 27 апреля 2011

Я пытаюсь присвоить изображению (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;

Я понятия не имею, будет ли работать нижний, не думаю. Просто то, что я попробовал.

Resource and Image

Ответы [ 2 ]

25 голосов
/ 27 апреля 2011

Я только что добавил ресурс с именем SampleBitmap (растровое изображение) в новый проект VCL. Затем я добавил элемент управления 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;
3 голосов
/ 27 апреля 2011

Вместо этого загрузите его прямо в 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;
...