本文整理自网络,侵删。
在D7下存储ico,Bitmap( icon.SaveToFile(); Bitmap.SaveToFile();) 等图片时,保存的结果都是非真彩图片。
这使得图片质量大大下降,而若要保存为真彩图片则需要修改VCl库文件,或是使用第三方VCl,很为麻烦。
经我测试,同样的问题则不会发生在D2007(CodeGear RAD Studio)和Delphi 2010中,既是在D2007中保存ico或bmp等图片时用SaveToFile方法得到的就是真彩图片。我估计D2005以上应该也都可以。
以下是获取图标的两种方法:
一:
uses ShellApi;
procedure getico; //添加移个TEdit用来得知要获取图标文件的地址
var
icon: TIcon ;//定义一个图标类型
begin
icon := TIcon.Create;
try
icon.Handle :=ExtractIcon(application.Handle,pchar(edit1.Text),0);//关键在于此函数,获得图标放到ico变量里
if icon.Handle <> 0 then //成功,赋给应用程序
application.Icon := icon;
icon.SaveToFile('e:\aaa.ico');//保存图标
finally
icon.Free; //释放图标变量
end;
end;
二:
uses ShellApi;
procedure geticon; //添加移个TImage控件用来存放图片,一个TEdit用来得知要获取图标文件的地址
var
sinfo: SHFILEINFO;
a:TBitmap;
begin
ZeroMemory(@sinfo, sizeof(sinfo));
SHGetFileInfo(pchar(Edit1.Text), FILE_ATTRIBUTE_NORMAL,
sinfo, sizeof(sinfo), SHGFI_USEFILEATTRIBUTES or SHGFI_ICON);
Image1.Picture.Icon.Handle := sinfo.hIcon;
Image1.Picture.SaveToFile('E:\aa.ico');// 保存图标
end;
相关阅读 >>
Delphi xe5、6、7在android或者ios上使用ansistring和ansichar
Delphi 从twebbrowser webbrowser得到全部html源码
Delphi 如何将memo或richedit保存为utf 8文本文件?
Delphi 获取随机字符串的方法 getrandomstring
更多相关阅读请进入《Delphi》频道 >>