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

DelphiX 實戰:TDIB 三種透明繪製方法對比

     編輯:Delphi

DelphiX 提供三種層級的透明繪製方法:DrawTransparent(單色透明)、DrawTranslucent(單色透明+半透明)、DrawAlpha(單色透明+指定 Alpha 值)。本文完整對比三者差異與適用場景。

效果預覽

三種透明繪製對比

方法對照表

方法功能參數適用場景
DrawTransparent指定顏色完全透明,其他完全不透明TransparentColor精靈圖、UI 圖示、非矩形圖像
DrawTranslucent先單色透明,再整體半透明(50%)TransparentColor半透明 UI、鬼影效果、淡入淡出
DrawAlpha先單色透明,再指定 Alpha 值(0~255)TransparentColor, Alpha精確控制透明度、動態淡入淡出

核心程式碼

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; // Transparent 黑色透明
    Button3: TButton; // Transparent 紅色透明
    Button4: TButton; // Translucent 黑色透明
    Button5: TButton; // Translucent 紅色透明
    Button6: TButton; // Alpha=32 黑色透明
    Button7: TButton; // Alpha=32 紅色透明
    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);
  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;

procedure TForm1.Button2Click(Sender: TObject); // Transparent clBlack
begin DXPaintBox1.DIB.Fill(Self.Color);
  DXPaintBox1.DIB.DrawTransparent(dib, 0, 0, dib.Width, dib.Height, 0, 0, clBlack);
  DXPaintBox1.Repaint; end;

procedure TForm1.Button3Click(Sender: TObject); // Transparent clRed
begin DXPaintBox1.DIB.Fill(Self.Color);
  DXPaintBox1.DIB.DrawTransparent(dib, 0, 0, dib.Width, dib.Height, 0, 0, clRed);
  DXPaintBox1.Repaint; end;

procedure TForm1.Button4Click(Sender: TObject); // Translucent clBlack
begin DXPaintBox1.DIB.Fill(Self.Color);
  DXPaintBox1.DIB.DrawTranslucent(dib, 0, 0, dib.Width, dib.Height, 0, 0, clBlack);
  DXPaintBox1.Repaint; end;

procedure TForm1.Button5Click(Sender: TObject); // Translucent clRed
begin DXPaintBox1.DIB.Fill(Self.Color);
  DXPaintBox1.DIB.DrawTranslucent(dib, 0, 0, dib.Width, dib.Height, 0, 0, clRed);
  DXPaintBox1.Repaint; end;

procedure TForm1.Button6Click(Sender: TObject); // Alpha=32 clBlack
begin DXPaintBox1.DIB.Fill(Self.Color);
  DXPaintBox1.DIB.DrawAlpha(dib, 0, 0, dib.Width, dib.Height, 0, 0, 32, clBlack);
  DXPaintBox1.Repaint; end;

procedure TForm1.Button7Click(Sender: TObject); // Alpha=32 clRed
begin DXPaintBox1.DIB.Fill(Self.Color);
  DXPaintBox1.DIB.DrawAlpha(dib, 0, 0, dib.Width, dib.Height, 0, 0, 32, clRed);
  DXPaintBox1.Repaint; end;
end.

視覺效果差異分析

  • Transparent clBlack:黑底透明,紅字完整顯示於白底上
  • Transparent clRed:紅字透明,黑字完整顯示(負片)
  • Translucent:在 Transparent 基礎上再 50% 半透明,紅字變淡、背景隱約可見
  • Alpha=32:約 12.5% 不透明度(32/255),極淡的疊加效果

選擇建議

  • 需要**完全透明背景** → DrawTransparent
  • 需要**固定半透明效果** → DrawTranslucent(效能略優)
  • 需要**動態/精確控制透明度** → DrawAlpha
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved