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;请大家帮我测试。为什么我用这段代码保存的图标是256,本这上面这段代码是可以实现保存24位图标的。为什么在我的delphi中,上几次都可以实现保存24位图标。现在怎么保存都是256位图标呢?
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;请大家帮我测试。为什么我用这段代码保存的图标是256,本这上面这段代码是可以实现保存24位图标的。为什么在我的delphi中,上几次都可以实现保存24位图标。现在怎么保存都是256位图标呢?
解决方案 »
- reportmachina 导出excel或word
- 如何拦载有dbgrideh的自动提交数据的功能
- 教育部奉行洋奴哲学,终于在4、6级考试中让步
- 本站现已收集了600多篇DELPHI教程,给大家学习用
- 谁知道怎么解决BDE中显示foxpro的dbf数据库时中文显示乱码的问题,谢谢!
- 我的查询太慢了,那位大位救命啊.
- 拟成立一个软件工作室,现欲吸纳几名成员,详情见内
- 关于object pascal的问题
- 100分求解(分数可以加):怎样在WIN2000中禁止特定程序运行?
- 一个关于fastreport语句的问题,
- 一个关于dbgrid 的问题请大家帮一下!
- 关闭已经打开的文件出错~在线等待解决办法~~
不可能 Icon.SaveToFile方法只能保存为16位的 256都不可能
我试了得到的ico色彩很差,应该试16位的吧!