Как поместить JPEG-картинку в exe-файл и потом загрузить ее?

Материал из DRKB

Как поместить JPEG-картинку в exe-файл и потом загрузить ее?[править | править код]

1)Создайте текстовый файл с расширением ".rc".Имя этого файла должно отличаться от имени файла - проекта или любого модуля проекта. Файл должен содержать строку вроде:

MYJPEG JPEG C:\DownLoad\MY.JPG
  • "MYJPEG" имя ресурса
  • "JPEG" пользовательский тип ресурса
  • "C:\DownLoad\MY.JPG" путь к JPEG файлу.

Пусть например rc - файл называется "foo.rc"

Запустите BRCC32.exe(Borland Resource CommandLine Compiler) - программа находится в каталоге Bin Delphi / C + +Builder'а - передав ей в качестве параметра полный путь к rc - файлу. В нашем примере:

C:\DelphiPath\BIN\BRCC32.EXE C:\ProjectPath\FOO.RC

Вы получите откомпилированный ресурс - файл с расширением ".res". (в нашем случает foo.res). Далее добавьте ресурс к своему приложению.

{ Грузим ресурс }
{$R FOO.RES}

uses Jpeg;

procedure LoadJPEGFromRes(TheJPEG: string; ThePicture: TPicture);
var
  ResHandle: THandle;
  MemHandle: THandle;
  MemStream: TMemoryStream;
  ResPtr: PByte;
  ResSize: Longint;
  JPEGImage: TJPEGImage;
begin
  ResHandle := FindResource(hInstance, PChar(TheJPEG), 'JPEG');
  MemHandle := LoadResource(hInstance, ResHandle);
  ResPtr := LockResource(MemHandle);
  MemStream := TMemoryStream.Create;
  JPEGImage := TJPEGImage.Create;
  ResSize := SizeOfResource(hInstance, ResHandle);
  MemStream.SetSize(ResSize);
  MemStream.Write(ResPtr^, ResSize);
  FreeResource(MemHandle);
  MemStream.Seek(0, 0);
  JPEGImage.LoadFromStream(MemStream);
  ThePicture.Assign(JPEGImage);
  JPEGImage.Free;
  MemStream.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  LoadJPEGFromRes('MYJPEG', Image1.Picture);
end;



ID: 02159