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

DelphiX 實戰:TDIB.DrawQuickAlpha 快速 Alpha 混合完整範例

     編輯:Delphi

TDIB.DrawQuickAlpha 提供高效能的單色 Alpha 混合,指定單一透明色與混合模式,適合大量精靈渲染、UI 元件繪製等即時繪圖場景。本文提供 9 種混合模式與顏色組合的完整對照展示。

效果預覽

DrawQuickAlpha 效果示意圖

核心程式碼

unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DIB, StdCtrls;
type
  TForm1 = class(TForm)
    DXPaintBox1: TDXPaintBox;
    Button1: TButton; // 原圖
    Button2: TButton; // 黑色+Normal
    Button3: TButton; // 黑色+Mix75
    Button4: TButton; // 黑色+Mix50
    Button5: TButton; // 黑色+Mix25
    Button6: TButton; // 紅色+Normal
    Button7: TButton; // 紅色+Mix75
    Button8: TButton; // 紅色+Mix50
    Button9: TButton; // 紅色+Mix25
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
  end;
var Form1: TForm1;
implementation {$R *.dfm}
var dib: TDIB;

procedure TForm1.FormCreate(Sender: TObject);
begin
  dib := TDIB.Create;
  dib.SetSize(DXPaintBox1.Width, DXPaintBox1.Height, 24);
  dib.Fill(0); // 黑底
  dib.Canvas.Brush.Style := bsClear;
  dib.Canvas.Font.Color := clRed;
  dib.Canvas.Font.Name := 'Tahoma';
  dib.Canvas.Font.Size := 32;
  dib.Canvas.Font.Style := [fsBold];
  dib.Canvas.TextOut(10, 10, 'DelphiX');
  Self.Color := clWhite;
end;

procedure TForm1.FormDestroy(Sender: TObject); begin dib.Free; end;

procedure TForm1.Button1Click(Sender: TObject);
begin DXPaintBox1.DIB.Assign(dib); DXPaintBox1.Repaint; end;

// 通用混合邏輯:填背景 -> DrawQuickAlpha -> Repaint
procedure TForm1.Button2Click(Sender: TObject); // 黑色 Normal
begin DXPaintBox1.DIB.Fill(Self.Color);
  DXPaintBox1.DIB.DrawQuickAlpha(dib, 0, 0, dib.Width, dib.Height, 0, 0, clBlack, fmNormal);
  DXPaintBox1.Repaint; end;

procedure TForm1.Button3Click(Sender: TObject); // 黑色 Mix75
begin DXPaintBox1.DIB.Fill(Self.Color);
  DXPaintBox1.DIB.DrawQuickAlpha(dib, 0, 0, dib.Width, dib.Height, 0, 0, clBlack, fmMix75);
  DXPaintBox1.Repaint; end;

procedure TForm1.Button4Click(Sender: TObject); // 黑色 Mix50
begin DXPaintBox1.DIB.Fill(Self.Color);
  DXPaintBox1.DIB.DrawQuickAlpha(dib, 0, 0, dib.Width, dib.Height, 0, 0, clBlack, fmMix50);
  DXPaintBox1.Repaint; end;

procedure TForm1.Button5Click(Sender: TObject); // 黑色 Mix25
begin DXPaintBox1.DIB.Fill(Self.Color);
  DXPaintBox1.DIB.DrawQuickAlpha(dib, 0, 0, dib.Width, dib.Height, 0, 0, clBlack, fmMix25);
  DXPaintBox1.Repaint; end;

procedure TForm1.Button6Click(Sender: TObject); // 紅色 Normal
begin DXPaintBox1.DIB.Fill(Self.Color);
  DXPaintBox1.DIB.DrawQuickAlpha(dib, 0, 0, dib.Width, dib.Height, 0, 0, clRed, fmNormal);
  DXPaintBox1.Repaint; end;

procedure TForm1.Button7Click(Sender: TObject); // 紅色 Mix75
begin DXPaintBox1.DIB.Fill(Self.Color);
  DXPaintBox1.DIB.DrawQuickAlpha(dib, 0, 0, dib.Width, dib.Height, 0, 0, clRed, fmMix75);
  DXPaintBox1.Repaint; end;

procedure TForm1.Button8Click(Sender: TObject); // 紅色 Mix50
begin DXPaintBox1.DIB.Fill(Self.Color);
  DXPaintBox1.DIB.DrawQuickAlpha(dib, 0, 0, dib.Width, dib.Height, 0, 0, clRed, fmMix50);
  DXPaintBox1.Repaint; end;

procedure TForm1.Button9Click(Sender: TObject); // 紅色 Mix25
begin DXPaintBox1.DIB.Fill(Self.Color);
  DXPaintBox1.DIB.DrawQuickAlpha(dib, 0, 0, dib.Width, dib.Height, 0, 0, clRed, fmMix25);
  DXPaintBox1.Repaint; end;
end.

混合模式常數對照

常數說明透明度效果
fmNormal正常覆蓋透明色完全透明,其他完全不透明
fmMix7575% 混合非透明區 75% 不透明度
fmMix5050% 混合非透明區 50% 不透明度
fmMix2525% 混合非透明區 25% 不透明度

參數說明

DrawQuickAlpha(SrcDIB, DstX, DstY, SrcW, SrcH, SrcX, SrcY, TransparentColor, FilterMode)
  • TransparentColor:指定視為透明的單一顏色(範例中 clBlack 或 clRed)
  • FilterMode:混合模式,決定非透明像素的最終不透明度
  • 效能優於通用 Alpha Blending,適合遊戲主迴圈大量繪製

視覺差異分析

  • 黑色透明色 + 白底:紅字區域保留,黑底變透明 → 紅字浮現
  • 紅色透明色 + 白底:紅字變透明,黑底保留 → 黑底浮現(負片效果)
  • Mix 模式:產生半透明疊加,背景色會混入前景
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved