...Recover Bitmaps from Resource Files by code?

Author: Davy Landman

Category: Graphic

procedure RecoverBitmapFromResource(const sRecourceName: PAnsiChar; const sDestFileName: string);
const
  
BM = $4D42;  {Bitmap type identifier}
var
  
Bmp: TBitmap;
  BMF: TBitmapFileHeader;
  HResInfo: THandle;
  MemHandle: THandle;
  mStream: TMemoryStream;
  ResPtr: PByte;
begin
  
BMF.bfType := BM;
  { Find, Load, and Lock the Resource containing BITMAP1 }
  
HResInfo  := FindResource(HInstance, sRecourceName, RT_BITMAP);
  MemHandle := LoadResource(HInstance, HResInfo);
  ResPtr    := LockResource(MemHandle);
  { the header is lost, so will need to be recalculated,
    but lets be lazy and let TBitmap recreate the full header }
  
mStream := TMemoryStream.Create;
  try
    
mStream.SetSize(SizeofResource(HInstance, HResInfo) + SizeOf(BMF));
    mStream.Write(BMF, SizeOf(BMF));
    mStream.Write(ResPtr^, SizeofResource(HInstance, HResInfo));
    mStream.Seek(0, 0);
    {Create the TBitmap and load the image from the MemoryStream}
    
Bmp := TBitmap.Create;
    try
      
Bmp.LoadFromStream(mStream);
      Bmp.SaveToFile(sDestFileName);
    finally
      
Bmp.Free;
    end;
  finally
    
FreeResource(MemHandle);
    mStream.Free;
  end;
end;

{usage: RecoverBitmapFromResource('BITMAP_1', 'C:\recover.bmp'); }

 

printed from
www.swissdelphicenter.ch
developers knowledge base