TDIB.DrawAlphaMask 使用第三個 DIB 作為 Alpha 遮罩,將兩張圖像進行透明度混合合成。遮罩的亮度決定不透明度:白色=完全不透明、黑色=完全透明、灰階=半透明。本文提供文字遮罩與圖片合成的互動範例。

unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DIB, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
DXPaintBox1: TDXPaintBox;
Button1: TButton; // 黑底黃字遮罩
Button2: TButton; // 黃底黑字遮罩
ColorBox1: TColorBox; // 遮罩背景色
ColorBox2: TColorBox; // 遮罩文字色
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
end;
var Form1: TForm1;
implementation {$R *.dfm}
const str = '春';
var dib, dib1, dib2: TDIB;
procedure TForm1.FormCreate(Sender: TObject);
const ImgPath1 = 'C:\Temp\DX.jpg';
begin
dib := TDIB.Create; dib1 := TDIB.Create; dib2 := TDIB.Create;
dib.LoadFromFile(ImgPath1);
DXPaintBox1.ClientWidth := dib.Width;
DXPaintBox1.ClientHeight := dib.Height;
DXPaintBox1.DIB.Assign(dib);
dib1.Assign(dib); // 備份原圖
dib2.SetSize(dib.Width, dib.Height, 24); // 遮罩圖
dib2.Canvas.Brush.Style := bsClear;
dib2.Canvas.Font.Name := '黑體';
dib2.Canvas.Font.Size := 90;
dib2.Canvas.Font.Style := [fsBold];
ColorBox1.Selected := clBlack;
ColorBox2.Selected := clYellow;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin dib.Free; dib1.Free; dib2.Free; end;
procedure TForm1.Button1Click(Sender: TObject); // 黑底黃字遮罩
begin
dib1.Assign(dib); // 還原原圖
dib2.Fill(ColorBox1.Selected); // 填充遮罩背景(黑)
dib2.Canvas.Font.Color := ColorBox2.Selected; // 遮罩文字(黃)
dib2.Canvas.TextOut(0, 0, str);
// DrawAlphaMask(MaskDIB, SrcDIB, DstX, DstY, W, H, SrcX, SrcY)
dib1.DrawAlphaMask(dib2, dib1, 0, 0, dib.Width, dib.Height, 0, 0);
DXPaintBox1.DIB.Assign(dib1);
DXPaintBox1.Repaint;
end;
procedure TForm1.Button2Click(Sender: TObject); // 黃底黑字遮罩(反相)
begin
dib1.Assign(dib);
dib2.Fill(ColorBox2.Selected); // 黃底
dib2.Canvas.Font.Color := ColorBox1.Selected; // 黑字
dib2.Canvas.TextOut(0, 0, str);
dib1.DrawAlphaMask(dib2, dib1, 0, 0, dib.Width, dib.Height, 0, 0);
DXPaintBox1.DIB.Assign(dib1);
DXPaintBox1.Repaint;
end;
end.
DrawAlphaMask(MaskDIB, SrcDIB, DstX, DstY, W, H, SrcX, SrcY)
dib1)兩個 TColorBox 讓使用者即時調整遮罩前景/背景色,觀察反相遮罩的不同合成結果。