type 
  TRGBALine = array[word] of TRGBQuad; 
  PRGBALine = ^TRGBALine;

function IconToBitmap(const IconHandle: HIcon):TBitmap; 
var 
  IcoInfo: TIconInfo; 
  mask: TBitmap; 
  x, y: word; 
begin 
  result := nil; 
  if NOT GetIconInfo(IconHandle, IcoInfo) then 
    exit;

  try 
    try 
      result := TBitmap.Create; 
      result.Handle := IcoInfo.hbmColor; 
      result.PixelFormat := pf32bit; 

      mask := TBitmap.Create; 
      mask.Handle := IcoInfo.hbmMask; 
      mask.PixelFormat := pf32bit; 

      for x := 0 to result.Width-1 do 
        for y := 0 to result.Height-1 do 
          pRGBALine(result.Scanline[y])^[x].rgbReserved := NOT pRGBALine(mask.Scanline[y])^[x].rgbRed;  
    except 
      FreeAndNil(result); 
    end; 
  finally 
    if Assigned(mask) then 
      mask.Free; 
  end; 
end;


위 함수를 사용할때는 아래와 같이 사용한다.

procedure TForm1.Button1Click(Sender: TObject); 
var 
  IconHandle: HIcon; 
  Bitmap: TBitmap; 
begin 
  IconHandle := LoadIcon(HInstance, 'MAINICON'); 

  if ( IconHandle <> 0 ) then 
  begin 
    Bitmap := IconToBitmap( IconHandle ); 
    if Bitmap <> nil then 
    begin 
      SaveToFile('C:\MAINICON.bmp'); 
      Free; 
    end; 
  end; 
end;
2008/07/17 14:30 2008/07/17 14:30
포스팅이 유익 하셨다면 RSS 구독을 신청하세요

Trackback Address >> http://dolba.net/tt/k2club/trackback/1896