首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

DelphiX 實戰:TDIB.DrawAlphaMask Alpha 遮罩合成完整範例

     編輯:Delphi

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

效果預覽

DrawAlphaMask 效果示意圖

核心程式碼

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)
  • MaskDIB:遮罩圖(灰階或彩色,以亮度為準)
  • SrcDIB:來源圖像(被遮罩的內容)
  • 輸出結果直接寫入呼叫物件(dib1)

遮罩設計技巧

  • 白色區域 → 來源圖像完全顯示
  • 黑色區域 → 來源圖像完全隱藏(透明)
  • 灰階漸層 → 柔和邊緣、淡入淡出
  • 可用繪圖工具預先製作複雜遮罩(如羽化邊緣、不規則形狀)

介面互動

兩個 TColorBox 讓使用者即時調整遮罩前景/背景色,觀察反相遮罩的不同合成結果。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved