2010-09-10 1 views

ответ

12

Используйте TResourceStream для Delphi. Конструктор найдет и загрузит ресурс в память, и метод SaveToFile выполнит запись на диске.

Нечто похожее на это должно работать:

var 
    ResStream: TResourceStream; 
begin 
    ResStream := TResourceStream.Create(HInstance, 'YOURRESOURCENAME', RT_RCDATA); 
    try 
    ResStream.Position := 0; 
    ResStream.SaveToFile('C:\YourDir\YourFileName.jpg'); 
    finally 
    ResStream.Free; 
    end; 
end; 

Если вы можете использовать идентификатор ресурса вместо имени, это немного меньше памяти. В этом случае вы замените Create на CreateFromID и укажите числовой идентификатор, а не имя строки.

+0

спасибо, Кен, отлично звучит. Btw, Какое значение для HInstance? – Mawg

+3

Независимо от того, что вам скажет ОС, @Leonix. 'HInstance' - это глобальная переменная, которую Delphi инициализирует для вас по мере запуска вашей программы. Он находится в * SysInit *. –

+0

+1 и еще раз спасибо! – Mawg

4

Создать TResourceStream. Вам понадобится дескриптор экземпляра модуля (обычно SysInit.HInstance для текущего EXE-файла, иначе вы получите от LoadLibrary или LoadPackage), тип ресурса (например, rt_Bitmap или rt_RCData) и либо имя ресурса, либо числовой идентификатор. Затем вызовите метод потока SaveToFile.

2
try 
    if not Assigned(Bitmap) 
    then 
     Bitmap := TBitmap.Create(); 
    Bitmap.LoadFromResourceName(HInstance,SRC); 
except 
    on E:Exception do 
     ShowMessage(e.Message); 
end; 

И затем сохранить растровое изображение на диск.