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

解决方案 »

  1.   

    procedure Bmp2Ico(bmp, ico: string); //bmp和ico是文件名 
    varIconSizeX : integer;IconSizeY : integer;myBmp : TBitmap;AndMask : TBitmap;XOrMask : TBitmap;IconInfo : TIconInfo;Icon : TIcon;beginIconSizeX := 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; 
    以上资料来自超级猛料
     
      

  2.   

    procedure BmpToIco(ABmp,AIco:string); 
    varbmp,mbmp:tbitmap;ico:ticon;rbmp:BITMAP;a:array[0..4096] of byte;len:dword;i:integer;imglist:timagelist;beginbmp:=tbitmap.Create;mbmp:=tbitmap.Create;mbmp.Assign(bmp);ico:=ticon.Create;imglist:=TImageList.CreateSize(32,32);trybmp.LoadFromFile(abmp);len:=GetBitmapBits(bmp.Handle,4096,@a);mbmp.Handle:=CreateBitmapIndirect(rbmp);for i:=0 to len doa[i]:=a[i] and a[i];SetBitmapBits(bmp.Handle,len,@a);imglist.add(bmp,mbmp);imglist.GetIcon(0,ico);finallybmp.Free;ico.Free;imglist.Free;end;end;
      

  3.   

    to grail_(grail_) 执行到这句imglist.add(bmp,mbmp);为什么总提示invalid image size
      

  4.   

    mbmp:=tbitmap.Create;
      mbmp.Width:=16;
      mbmp.Height:=16;
    加上上面的两句试试