本文主要是介绍【Delphi】一种生成透明 Icon 图标方法、原理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在程序开发中,我们会遇到制作程序的主图标,windows下程序的图标给是要求是ico格式,也就是常说的Icon。本文介绍一种Delphi利用windos API生成icon的方法。
在制作ico图标的时候,我们需要两幅bitmap图片,一幅我们称作掩码图片,命名为:MaskBitmap
,另外一幅就是真正的图片,命名为:ColorBitmap
,掩码图片实现真正图片的透明功能。
MaskBitmap
和 ColorBitmap
在图标显示中的作用决定了图标的透明度和颜色。为了更好地理解这两个位图如何影响最终的图标显示效果,下面我通过具体的例子和解释来说明。
1. MaskBitmap
和 ColorBitmap
的作用
-
MaskBitmap
: 掩码位图,通常为 1 位 (黑白) 位图,用于定义图标的透明部分和不透明部分。- 白色部分 (1): 表示图标的透明区域,即该区域不显示图标的内容,显示背景。
- 黑色部分 (0): 表示图标的可见区域,即该区域会显示
ColorBitmap
的内容。
-
ColorBitmap
: 颜色位图,用于定义图标的颜色和图形内容。在MaskBitmap
标记为黑色的区域显示。
2. 示例代码及效果
我们通过一个简单的例子来演示 MaskBitmap
和 ColorBitmap
的组合效果。
示例代码
usesWinapi.Windows, Vcl.Graphics, Vcl.Forms;function CreateCustomIcon: HICON;
varIconInfo: TIconInfo;MaskBitmap, ColorBitmap: TBitmap;
beginMaskBitmap := TBitmap.Create;ColorBitmap := TBitmap.Create;try// 设置位图大小MaskBitmap.SetSize(32, 32);MaskBitmap.PixelFormat := pf1bit;ColorBitmap.SetSize(32, 32);ColorBitmap.PixelFormat := pf32bit;// 设置MaskBitmap:黑色部分是显示区域,白色部分是透明区域MaskBitmap.Canvas.Brush.Color := clWhite;MaskBitmap.Canvas.FillRect(Rect(0, 0, 32, 32));MaskBitmap.Canvas.Brush.Color := clBlack;MaskBitmap.Canvas.Ellipse(0, 0, 32, 32); // 绘制一个黑色的圆形,表示显示区域// 设置ColorBitmap:填充一个红色的背景ColorBitmap.Canvas.Brush.Color := clRed;ColorBitmap.Canvas.FillRect(Rect(0, 0, 32, 32));// 配置IconInfoIconInfo.fIcon := True;IconInfo.xHotspot := 0;IconInfo.yHotspot := 0;IconInfo.hbmMask := MaskBitmap.Handle;IconInfo.hbmColor := ColorBitmap.Handle;// 使用CreateIconIndirect创建图标Result := CreateIconIndirect(@IconInfo);finallyMaskBitmap.Free;ColorBitmap.Free;end;
end;procedure TForm1.FormCreate(Sender: TObject);
varIconHandle: HICON;
beginIconHandle := CreateCustomIcon;// 在表单的图标中显示if IconHandle <> 0 thenbeginApplication.Icon.Handle := IconHandle;DestroyIcon(IconHandle);end;
end;
代码解释
MaskBitmap
:- 它绘制了一个黑色的圆形在白色背景上。黑色的圆形区域表示显示
ColorBitmap
内容的区域,而白色的背景表示透明区域。
- 它绘制了一个黑色的圆形在白色背景上。黑色的圆形区域表示显示
ColorBitmap
:- 它完全填充了红色。在最终的图标中,
MaskBitmap
黑色区域内将显示红色,白色区域内将是透明的。
- 它完全填充了红色。在最终的图标中,
最终的显示效果
假设你在一个桌面应用程序的窗口标题栏或任务栏中看到这个图标:
- 背景区域:
MaskBitmap
的白色区域将显示为透明,因此背景颜色将透过图标显示出来。 - 圆形区域:
MaskBitmap
的黑色区域将显示ColorBitmap
中的内容,在本例中是红色,因此你会看到一个红色的圆形图标。
3. 不同组合的效果
以下是几种可能的 MaskBitmap
和 ColorBitmap
组合及其对应的效果:
- 全黑的
MaskBitmap
:整个图标都显示ColorBitmap
的内容。 - 全白的
MaskBitmap
:整个图标透明,不显示任何内容。 - 复杂形状的
MaskBitmap
:例如,一个星形的黑色区域和白色背景。图标会显示星形的ColorBitmap
内容,其他区域透明。
总结
MaskBitmap
控制图标的透明区域和显示区域,而 ColorBitmap
则填充显示区域的颜色。通过组合这两者,你可以创建具有透明背景、特定形状和颜色的图标。在实际应用中,正确地理解和使用这两者,可以帮助你实现精确的图标设计。
这篇关于【Delphi】一种生成透明 Icon 图标方法、原理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!