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

DelphiX 實戰:TDIB.DrawAdditive 疊加繪製效果完整範例

     編輯:Delphi

TDIB.DrawAdditive 以加法混合模式將來源圖像疊加到目標 DIB 上,常用於發光、光暈等特效。本文提供完整可編譯的 Delphi 範例,展示不同 Alpha 值下的視覺差異。

效果預覽

DrawAdditive 效果示意圖

核心程式碼

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; // Alpha=1
    Button3: TButton; // Alpha=128
    Button4: TButton; // 黑底+Alpha=128
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  end;
var Form1: TForm1;
implementation
{$R *.dfm}
var dib: TDIB;

procedure TForm1.FormCreate(Sender: TObject);
const ImgPath1 = 'C:\Temp\test.bmp';
begin
  Position := poScreenCenter;
  dib := TDIB.Create;
  dib.LoadFromFile(ImgPath1);
  DXPaintBox1.Width := dib.Width;
  DXPaintBox1.Height := dib.Height;
end;

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

procedure TForm1.Button1Click(Sender: TObject); // 顯示原圖
begin
  DXPaintBox1.DIB.Assign(dib);
  DXPaintBox1.Repaint;
end;

procedure TForm1.Button2Click(Sender: TObject); // Alpha=1 (幾乎透明)
begin
  DXPaintBox1.DIB.Fill(clWhite);
  DXPaintBox1.DIB.DrawAdditive(dib, 0, 0, dib.Width, dib.Height, 1);
  DXPaintBox1.Repaint;
end;

procedure TForm1.Button3Click(Sender: TObject); // Alpha=128 (半透明疊加)
begin
  DXPaintBox1.DIB.Fill(clWhite);
  DXPaintBox1.DIB.DrawAdditive(dib, 0, 0, dib.Width, dib.Height, 128);
  DXPaintBox1.Repaint;
end;

procedure TForm1.Button4Click(Sender: TObject); // 黑底 + Alpha=128 (發光效果)
begin
  DXPaintBox1.DIB.Fill(clBlack);
  DXPaintBox1.DIB.DrawAdditive(dib, 0, 0, dib.Width, dib.Height, 128);
  DXPaintBox1.Repaint;
end;
end.

關鍵參數說明

  • DrawAdditive(SrcDIB, X, Y, SrcW, SrcH, Alpha)
  • Alpha 範圍 0~255:0 完全透明,255 完全不透明
  • 背景色影響大:白底疊加呈現高光,黑底疊加產生螢光/發光效果

視窗設計(DFM 摘要)

object Form1: TForm1
  ClientHeight = 204, ClientWidth = 253
  object DXPaintBox1: TDXPaintBox ... end
  object Button1: TButton ... Caption = 'Button1' ... end
  object Button2: TButton ... Caption = 'Button2' ... end
  object Button3: TButton ... Caption = 'Button3' ... end
  object Button4: TButton ... Caption = 'Button4' ... end
end

建議將按鈕 Caption 改為「原圖」、「Alpha=1」、「Alpha=128(白底)」、「Alpha=128(黑底)」以利辨識。

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