作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建并初始化TImageList
...
ImageList:=TImageList.Create(self);
ImageList.ShareImages:=true;
我获取小图标 (16x16) 的系统 ImageList 句柄...
ImageList.Handle:=SHGetFileInfo('',0,FileInfo,SizeOf(FileInfo),SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
现在我想在控制 Canvas 上绘制缩放为 50x50 像素的图标。我该怎么做?
最佳答案
放大小图标从来都不是好主意。 16X16 图标太小,无法按原样以任何其他方式使用。
首先,您可以使用以下命令获取更大的 shell 图像
ImageList.Handle:=SHGetFileInfo('',0,FileInfo,SizeOf(FileInfo),SHGFI_SYSICONINDEX or SHGFI_ICON);
这些图像通常为 32x32 像素,但为了安全起见(如果 Windows 在高 DPI 模式下运行),您可以从系统获取正确的尺寸
uses
Winapi.Windows;
var
IconWidth, IconHeight: integer;
IconWidth := GetSystemMetrics(SM_CXICON);
IconHeight := GetSystemMetrics(SM_CYICON);
您还可以使用 SHGetImageList
获取更大的 shell 图像 http://msdn.microsoft.com/en-us/library/windows/desktop/bb762185%28v=vs.85%29.aspx
要从 ImageList 中检索图标(如果 ImageList 包含图标,并且在您的情况下确实如此),您可以使用:
ImageList.GetIcon(Index: Integer; Image: TIcon);
要在保留透明度的同时缩放图标到自定义尺寸,您可以使用以下代码:
procedure StretchDrawIcon(Canvas: TCanvas; Dest: TRect; Icon: TIcon);
begin
DrawIconEx(Canvas.Handle, Dest.Left, Dest.Top, Icon.Handle, Dest.Right - Dest.Left, Dest.Bottom - Dest.Top, 0, 0, DI_NORMAL);
end;
关于delphi - 如何从系统ImageList中绘制图像的缩放版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27135438/
我是一名优秀的程序员,十分优秀!