【问题标题】:How can I icrease the canvas of a transparent icon?如何增加透明图标的画布?
【发布时间】:2020-01-26 21:55:23
【问题描述】:

我有一些透明图标,其大小比要添加它们的 ImageList 小。我尝试像往常一样使用ImageList.AddIcon(IcoHandle); 添加它们,但似乎它们已缩放到 ImageList 大小。我想找到一种方法来增加具有透明颜色的 Icon 的画布,以便将其添加到 ImageList 中而无需缩放。这可能吗?

更新1:

我已经按照大卫所说的做了,但是图标失去了透明度......

 LoadIconWithScaleDown(HInstance, PChar('NUT_VITAL'), ISmall, ISmall, hI);
 Ico.Handle:= hI;

 Bmp:= TBitmap.Create;
 Bmp.Transparent:= True;
 Bmp.PixelFormat:= pf32bit;
 Bmp.SetSize(ISize, ISize);
 Bmp.Canvas.Draw(0, 0, Ico);
 Pics.Add(Bmp, nil);
 Bmp.Free;

【问题讨论】:

  • 创建一个所需大小的新图像,并在其上绘制较小的图像
  • @DavidHeffernan 检查我的更新...
  • 你为什么要创建一个可视化控件(TImage)来复制图标?这完全不合适(而且没有必要)。
  • @KenWhite 不然怎么办?
  • 在代码中创建一个TBitmap,并用它代替TImageTImage 控件用于向用户直观地显示图像。

标签: delphi icons delphi-10.3-rio


【解决方案1】:

我终于想通了...感谢 here 的 David、Ken 和 Torbins 的回答。

在设置位图大小之前,我必须将画笔样式设置为bsClear。 :)

LoadIconWithScaleDown(HInstance, PChar('NUT_VITAL'), ISmall, ISmall, hI);
Ico.Handle := hI;

Bmp := TBitmap.Create;
try
  Bmp.Canvas.Brush.Style := bsClear;
  Bmp.SetSize(ISize, ISize);
  N := (ISize - ISmall) div 2;
  Bmp.Canvas.Draw(N, N, Ico);
  Pics.Add(Bmp, nil);
finally
  Bmp.Free; 
end;

【讨论】:

  • 很奇怪。为什么不将 ISize 传递给 LoadIconWithScaleDown
  • ISize 是我的图像列表大小,但我希望一些图标比通常的大小更小...
  • 如果您的资源位于某个资源中,请根据需要多次调用 LoadIconWithScaleDown,以便在代码中以您需要的任何大小加载它
  • 是的,但我将这些图标用于某些 TButton,并且它们与 ImageList 一起使用。
  • 没有什么能阻止你做这两件事。是什么让您认为您只能调用 LoadIconWithScaleDown 一次?
猜你喜欢
  • 2018-05-27
  • 2014-08-12
  • 1970-01-01
  • 1970-01-01
  • 2013-02-05
  • 2011-03-05
  • 2019-06-13
  • 2017-04-12
  • 2011-07-02
相关资源
最近更新 更多