如何将bmp文件转成.ico文件
要求背景是透明的.

解决方案 »

  1.   

    procedure Bmp2Ico(bmp, ico: string); //bmp和ico是文件名
    var
      IconSizeX : integer;
      IconSizeY : integer;
      myBmp : TBitmap;
      AndMask : TBitmap;
      XOrMask : TBitmap;
      IconInfo : TIconInfo;
      Icon : TIcon;
    begin
      IconSizeX := GetSystemMetrics(SM_CXICON);
      IconSizeY := GetSystemMetrics(SM_CYICON);  myBmp := TBitmap.Create;
      myBmp.LoadFromFile(bmp);  AndMask := TBitmap.Create;
      AndMask.Width := IconSizeX;
      AndMask.Height := IconSizeY;
      AndMask.Canvas.Brush.Color := clBlack;
      AndMask.Canvas.Rectangle(0, 0, IconSizeX, IconSizeY);  XOrMask := TBitmap.Create;
      XOrMask.Width := IconSizeX;
      XOrMask.Height := IconSizeY;
      StretchBlt(XorMask.Canvas.Handle, 0, 0, IconSizeX, IconSizeY,
                 myBmp.Canvas.Handle, 0, 0, myBmp.Width, myBmp.Height, SRCCOPY);  Icon := TIcon.Create;
      IconInfo.fIcon := true;
      IconInfo.xHotspot := 0;
      IconInfo.yHotspot := 0;
      IconInfo.hbmMask := AndMask.Handle;
      IconInfo.hbmColor := XOrMask.Handle;
      Icon.Handle := CreateIconIndirect(IconInfo);  AndMask.Free;
      XOrMask.Free;
      myBmp.Free;  Icon.SaveToFile(ico);
      Icon.Free;
    end;
    from超级猛料
      

  2.   

    把一个 ICO 转换为 BMP
    (1) 方法 1var    Icon   : TIcon;    Bitmap : TBitmap;begin     Icon   := TIcon.Create;     Bitmap := TBitmap.Create;     Icon.LoadFromFile('c:\picture.ico');  //Load an ICOfrom File     Bitmap.Width := Icon.Width;     Bitmap.Height := Icon.Height;     Bitmap.Canvas.Draw(0, 0, Icon );     Bitmap.SaveToFile('c:\picture.bmp'); //Convert ICO toBMP!     Icon.Free;     Bitmap.Free;end;
    (2) 方法 2procedure TForm1.ConvertClick(Sender: TObject);var   winDC, srcdc, destdc : HDC;   oldBitmap : HBitmap;   iinfo : TICONINFO;begin  GetIconInfo(Image1.Picture.Icon.Handle, iinfo);  WinDC := getDC(handle);  srcDC := CreateCompatibleDC(WinDC);  destDC := CreateCompatibleDC(WinDC);  oldBitmap := SelectObject(destDC, iinfo.hbmColor);  oldBitmap := SelectObject(srcDC, iinfo.hbmMask);  BitBlt(destdc, 0, 0,Image1.picture.icon.width,Image1.picture.icon.height,srcdc,0, 0, SRCPAINT);  Image2.picture.bitmap.handle := SelectObject(destDC,oldBitmap);  DeleteDC(destDC);  DeleteDC(srcDC);  DeleteDC(WinDC);  image2.Picture.Bitmap.savetofile(ExtractFilePath(Application.ExeName)+ 'myfile.bmp');end;
    procedure TForm1.FormCreate(Sender: TObject);begin  image1.picture.icon.loadfromfile('c:\myicon.ico');end;
      

  3.   

    to  outer2000(天外流星)你的这段代码我试过了,真彩的图标转换后图标失真,变面了2色的。
      

  4.   

    outer2000(天外流星)的办法应该可以呀!