Как я делаю ресурс PNG?

Обычно это может быть сделано при помощи указателя функции, который является специальной переменной, которая указывает на ячейку памяти функции. Можно тогда использовать это для вызывания функции с определенными аргументами. Таким образом, вероятно, будет функция, которая устанавливает функцию обратного вызова. Это примет указатель функции и затем сохранит тот адрес где-нибудь, где он может использоваться. После этого, когда указанное событие инициировано, оно вызовет ту функцию.

35
задан Fabrizio 31 August 2019 в 00:03
поделиться

3 ответа

Пример текстового файла (с именем myres.rc):

MYPNG RCDATA mypng.png

Добавлен в проект:

{$R 'myres.res' 'myres.rc'}

Пример загрузки во время выполнения:

uses
  PngImage;

var
  Png: TPngImage;
begin
  Png := TPngImage.Create;
  try
    Png.LoadFromResourceName(HInstance, 'MYPNG');
    Image1.Picture.Graphic := Png; // Image1: TImage on the form
  finally
    Png.Free;
  end;
end;
54
ответ дан 27 November 2019 в 07:10
поделиться

Если вы используете Delphi 2009, TImage должен сохранить ваш файл PNG как PNG в файле DFM. DFM будет больше, так как двоичное содержимое свойства Picture.Data объекта TImage закодировано в DFM как шестнадцатеричный текст. Но когда DFM компилируется в ваш EXE, он компилируется в двоичный ресурс. Ваше изображение должно занимать такое же пространство внутри ресурса формы RCDATA, как и сохранение PNG в собственном ресурсе RCDATA.

Я только что проверил это, открыв один из моих собственных файлов DFM Delphi 2009, в которых есть компонент TImage с PNG изображение загружается во время разработки в текстовом редакторе, копируя содержимое свойства Picture.Data и вставляя его в шестнадцатеричный редактор. Шестнадцатеричный редактор показывает мне, что в свойстве Picture.Data хранится фактический файл PNG с префиксом из 10 байтов. Первый байт равен $ 09, а следующие 9 байтов составляют TPngImage. Если я удалю эти 10 байтов и сохраню файл в шестнадцатеричном редакторе, я получу правильный файл PNG.

Поэтому, если вы используете Delphi 2009, просто загрузите изображение PNG в компонент TImage во время разработки.

1
ответ дан 27 November 2019 в 07:10
поделиться
1
ответ дан 27 November 2019 в 07:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: