Delphi】实现程序屏幕内容防止截图(禁止截屏)
在程序开发中,我们会遇到制作程序的主图标,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 的组合效果。
示例代码
uses
Winapi.Windows, Vcl.Graphics, Vcl.Forms;
function CreateCustomIcon: HICON;
var
IconInfo: TIconInfo;
MaskBitmap, ColorBitmap: TBitmap;
begin
MaskBitmap := 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));
// 配置IconInfo
IconInfo.fIcon := True;
IconInfo.xHotspot := 0;
IconInfo.yHotspot := 0;
IconInfo.hbmMask := MaskBitmap.Handle;
IconInfo.hbmColor := ColorBitmap.Handle;
// 使用CreateIconIndirect创建图标
Result := CreateIconIndirect(@IconInfo);
finally
MaskBitmap.Free;
ColorBitmap.Free;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
IconHandle: HICON;
begin
IconHandle := CreateCustomIcon;
// 在表单的图标中显示
if IconHandle <> 0 then
begin
Application.Icon.Handle := IconHandle;
DestroyIcon(IconHandle);
end;
end;
代码解释
MaskBitmap:
它绘制了一个黑色的圆形在白色背景上。黑色的圆形区域表示显示 ColorBitmap 内容的区域,而白色的背景表示透明区域。
ColorBitmap:
它完全填充了红色。在最终的图标中,MaskBitmap 黑色区域内将显示红色,白色区域内将是透明的。
最终的显示效果
假设你在一个桌面应用程序的窗口标题栏或任务栏中看到这个图标:
背景区域:MaskBitmap 的白色区域将显示为透明,因此背景颜色将透过图标显示出来。
圆形区域:MaskBitmap 的黑色区域将显示 ColorBitmap 中的内容,在本例中是红色,因此你会看到一个红色的圆形图标。
3. 不同组合的效果
以下是几种可能的 MaskBitmap 和 ColorBitmap 组合及其对应的效果:
全黑的 MaskBitmap:整个图标都显示 ColorBitmap 的内容。
全白的 MaskBitmap:整个图标透明,不显示任何内容。
复杂形状的 MaskBitmap:例如,一个星形的黑色区域和白色背景。图标会显示星形的 ColorBitmap 内容,其他区域透明。
总结
MaskBitmap 控制图标的透明区域和显示区域,而 ColorBitmap 则填充显示区域的颜色。通过组合这两者,你可以创建具有透明背景、特定形状和颜色的图标。在实际应用中,正确地理解和使用这两者,可以帮助你实现精确的图标设计。
————————————————
原文链接:https://blog.csdn.net/sensor_WU/article/details/141777455
Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号
执行时间: 0.087622880935669 seconds