Delphi 下保存真彩彩图标的方法实例


本文整理自网络,侵删。

 在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 10进制数与33进制数的转换

Delphi d10.x 在android 9及更高版本下使用Delphi获取设备序列号?

Delphi access存储过程是带参数的查询语句

Delphi listbox用canvas属性绘图

Delphi 获取指定年月的周、日数 -weeksinayear、weeksinyear、daysinayear、daysinamonth、daysinyear、daysinmonth

Delphi实现进制转化(2进制,8进制,10进制,16进制)

Delphi获取千千静听歌词下载地址源码

Delphi 时间与字符串

Delphi ado 动态建立.mdb数据库,表

Delphi 取字符串中间

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...