2010-09-10 9 views

Respuesta

12

Utilice Delphi's TResourceStream. Su constructor encontrará y cargará el recurso en la memoria, y su método SaveToFile hará la escritura del disco.

Algo similar a esto debería funcionar:

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; 

Si puede utilizar el ID de recurso en lugar del nombre, que es un poco menos memoria. En ese caso, reemplazaría Create con CreateFromID y proporcionaría el ID numérico en lugar del nombre de la cadena.

+0

gracias, Ken, suena genial. Por cierto, ¿qué valor para HInstance? – Mawg

+3

Sea cual sea el valor que el sistema operativo le indique, @Leonix. 'HInstance' es una variable global que Delphi inicializa cuando el programa se inicia. Está en la unidad * SysInit *. –

+0

+1 y gracias de nuevo! – Mawg

4

Crear un TResourceStream. Necesitará el identificador de instancia del módulo (generalmente SysInit.HInstance para el archivo EXE actual, o lo que sea que obtenga de LoadLibrary o LoadPackage), el tipo de recurso (como rt_Bitmap o rt_RCData) y el nombre del recurso o ID numérico. Luego, llame al método SaveToFile de la transmisión.

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

Y a continuación, guarde el mapa de bits en el disco.

Cuestiones relacionadas