雖然 GIF 格式原生支援透明顯示,但其最大限制為 256 色(8-bit),無法呈現真彩色影像。BMP 位圖雖不原生支援透明,但在 C++ Builder 中透過 TImage 元件或直接繪圖 API,可輕鬆實現真彩色透明位圖顯示,畫面效果更細膩逼真。
| 元件 | 圖片來源 | Transparent | AutoSize | 用途 |
| Image1 | BlueSky.bmp | False | - | 不透明背景(藍天) |
| Image2 | Plane.bmp | True | True | 透明飛機(疊加於 Image1 上) |
| Image3 | Plane.bmp | False | True | 不透明對照組 |
設定 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 三大屬性交互運作,即可輕鬆實現真彩色透明效果。
- 上一篇文章: C++ 使用者定義型別轉換:簡化運算子多載的關鍵技術
- 下一篇文章: C/C++ 通用物件鏈表實作指南:虛擬鏈表與 C++ 類別封裝完整方案
Copyright ©
程式碼之家 All Rights Reserved