最近我发现对于作为实例TCanvas.StretchDraw
的对象来说,它不会像预期的那样工作TIcon
(快速查看TIcon.Draw
和DrawIconEx
方法说明原因)。德尔福帮助承认这一事实。我知道解决方法,但我不知道 VCL 中这种设计决策背后的原因。有谁知道他们为什么决定TIcon
在这件事上保持不变?
问问题
482 次
1 回答
1
图标不是常规位图。这主要是由于历史设计和技术原因。
在图标很小 32x32 像素大和 16 种颜色(好日子!)的时候,图标永远不会在屏幕上拉伸,这确实是有道理的。
但也有“常识”的技术原因。这种小位图通常很难通过算法重新调整大小(默认 GDI 拉伸算法非常快,但相对于其他插值模式也产生非常糟糕的结果,例如 GDI+ 可用),因此决定嵌入可执行文件中的一组图标,作为资源:每个大小一个图标。拉伸过程的好处是在设计时由图标设计师在像素级别完成。而且 - 回到那些日子 - 使用专用图标也减少了资源消耗,减少了调色板。
由于您应该有一组具有预定义大小的图标,因此您不需要使用 StrechDraw,而只需选择要显示的正确图标。
因此,如果您想显示一个给定尺寸的图标,请确保选择正确的尺寸,或者使用临时位图或DrawIconEx()
. 或者,更好的是,不要使用图标,而是使用位图或矢量绘图,如果您希望图片尺寸很大的话。
于 2013-09-30T06:47:24.963 回答