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

C++ Builder 顯示透明位圖完整指南:TImage 與直接繪圖兩大技法

     編輯:關於C++

為什麼選擇透明位圖而非 GIF?

雖然 GIF 格式原生支援透明顯示,但其最大限制為 256 色(8-bit),無法呈現真彩色影像。BMP 位圖雖不原生支援透明,但在 C++ Builder 中透過 TImage 元件或直接繪圖 API,可輕鬆實現真彩色透明位圖顯示,畫面效果更細膩逼真。

方法一:使用 TImage 元件建立飛機飛行動畫

步驟 1:建立專案與元件佈局

  • 建立新專案,儲存為 planemain.cpp / plane.cpp
  • 放置元件:TButton (Button1)、TTimer (Timer1)、三個 TImage (Image1~3)、TLabel

步驟 2:設定圖層與透明屬性

設定 Timer1:Enabled=false、Interval=100(控制飛行速度)

步驟 3:撰寫動畫邏輯

// Timer1 OnTimer - 飛機移動
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    Image2->Left = Image2->Left + 1;
}

// Button1 OnClick - 啟動動畫
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Timer1->Enabled = true;
}

方法二:直接從檔案載入位圖繪製到畫布(記憶體效率更高)

擴充介面

新增 Button2 (Caption="顯示透明位圖")

核心程式碼實作

void __fastcall TForm1::Button2Click(TObject *Sender)
{
    Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
    try {
        // 1. 載入位圖檔案
        pBitmap->LoadFromFile("Plane.bmp");
        
        // 2. 啟用透明屬性
        pBitmap->Transparent = true;
        
        // 3. 設定透明色(取座標 [2,2] 的像素顏色)
        pBitmap->TransparentColor = pBitmap->Canvas->Pixels[2][2];
        
        // 4. 繪製到視窗畫布(tmFixed 模式:使用指定 TransparentColor)
        Form1->Canvas->Draw(10, 20, pBitmap);  // 位置 AA
        
        // 5. 切換至 tmAuto 模式(自動取左下角像素為透明色)
        pBitmap->TransparentMode = tmAuto;
        Form1->Canvas->Draw(10, 100, pBitmap); // 位置 BB
        
        // 6. 繪製到背景位圖上(Image1)
        Image1->Canvas->Draw(30, 20, pBitmap);
    }
    catch (...) {
        ShowMessage("無法載入或顯示位圖!");
    }
    delete pBitmap; // 釋放記憶體
}

關鍵屬性說明

  • TransparentMode = tmFixed:使用 TransparentColor 指定的顏色作為透明色
  • TransparentMode = tmAuto:自動使用位圖左下角 (0, Height-1) 像素顏色作為透明色
  • Canvas->Draw():支援透明繪製的核心方法

進階應用與注意事項

  • 圖像合成:背景必須為位圖,透明位圖與背景色彩位數應一致,避免色彩失真
  • 替代方案:TImageList 元件亦可顯示透明影像;TCanvas::BrushCopy() 可實現局部透明複製
  • 測試環境:Windows 98 + C++ Builder 3 驗證通過

總結

C++ Builder 提供兩種透明位圖顯示路徑:TImage 元件適合簡單動畫與視覺化設計;直接繪圖法則更靈活、記憶體佔用少,適合複雜場景合成。掌握 Transparent、TransparentColor、TransparentMode 三大屬性交互運作,即可輕鬆實現真彩色透明效果。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
元件圖片來源TransparentAutoSize用途
Image1BlueSky.bmpFalse-不透明背景(藍天)
Image2Plane.bmpTrueTrue透明飛機(疊加於 Image1 上)
Image3Plane.bmpFalseTrue不透明對照組