A
aKnightChen
Unregistered / Unconfirmed
GUEST, unregistred user!
我的转化过程如下: procedure pTranBmpFileToIcon(sBmpFileName,sIconFileName:string;aMaskColor:TColor);var aIcon:TIcon; aBitmap:TBitmap; aImageList:TImageList;begin //如果用Result来返回ICON的话,会无法释放内存的 aIcon:=TIcon.Create; aBitmap:=TBitmap.Create; aImageList:=TImageList.Create(nil); try aBitmap.LoadFromFile(sBmpFileName); aImageList.GetIcon(aImageList.AddMasked(aBitmap,aMaskColor),aIcon); aIcon.SaveToFile(sIconFileName); finally aBitmap.Free; aImageList.Free; aIcon.Free; end;end;*******************************************************************************担是,我改了Graphics这个单元,让它支持65536色.改了之后,就无法实现Bitmap转Icon了,(未改之前,以上代码可以实现Bitmap转Icon,只是16色而已).******************************************************************************* http://topic.csdn.net/t/20060611/11/4814219.html 实际上,delphi是支持任意颜色的图标的.你自己可以试验一下:写个程序,读入 Image1.Picture.Icon.LoadFromFile();读入一个大于16色的图标,显示颜色是正常的.然 后保存Image1.Picture.Icon.SaveToFile();到文件,用其它软件打开该图标,颜色也是正 常的.所以说,delphi是支持高彩色的. 但是,如果你把它赋给一个TIcon再保存,就只有16位色了.原因很简单.Delphi的Graphics 单元有BUG.实际上,它会调用Graphics单元的 procedure WriteIcon(Stream: TStream; Icon: HICON; WriteLength: Boolean);过程. 问题就在这里: ... InternalGetDIBSizes(IconInfo.hbmColor, ColorInfoSize, ColorBitsSize, 16); ... InternalGetDIB(IconInfo.hbmColor, 0, ColorInfo^, ColorBits^, 16); 把上面的两个16改成65536,然后删除Graphics.dcu,重新编译.即可支持65536色了(XP图标).