CxImage img;
img.Load(_T("d:\\0.bmp"), CXIMAGE_FORMAT_BMP); // 原圖含 Alpha 通道 (全透明)
img.Save(_T("d:\\1.bmp"), CXIMAGE_FORMAT_BMP); // 儲存後 Alpha 全變 0xFF (不透明)
若原圖 Alpha 非全透明 (如半透明),儲存後正常。
CxImage 內部 BMP 編碼器在處理 32-bit BMP (含 Alpha) 時,預設強制將 Alpha 通道設為 0xFF,導致全透明圖層變成不透明。此為庫已知限制/Bug。
ximabmp.cpp 的 CxImageBMP::Encode 函式中,找到寫入像素資料的迴圈,移除或註解掉強制設定 Alpha 的邏輯:
// 原始碼片段 (約線 1200)
for (y=0; y
img.Save(_T("d:\\1.png"), CXIMAGE_FORMAT_PNG);
for (int y=0; y
Windows 標準 BMP 格式 (BI_RGB) 雖定義 32-bit 含保留位元組,但歷史版本不解析 Alpha。若需相容舊系統,建議輸出 24-bit BMP + 獨立 Alpha 遮罩檔。