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

像素疊加實現圖片半透明混合:Alpha Blending 原理與實現

     編輯:關於C++

前言

遊戲中常見的半透明混合效果視覺效果極佳。出於好奇,筆者嘗試從生活經驗推導其實現原理:將兩張膠片疊合會產生半透明效果,對應到位圖像素,即對兩圖對應像素的 RGB 分量分別取加權平均。實驗證實這一定性認識完全正確。

核心算法:Alpha 混合公式

給定透明度參數 alpha (0~255),前景色 clr2、背景色 clr1,混合結果為:

/**//*
 * Alpha 混合演示
 */
inline COLORREF AlphaPixel(UINT alpha, COLORREF clr1, COLORREF clr2) {
    double k = (double)alpha / 256.0;
    double reverse_k = 1.0 - k;

    BYTE r = BYTE( GetRValue(clr2) * k + GetRValue(clr1) * reverse_k );
    BYTE g = BYTE( GetGValue(clr2) * k + GetGValue(clr1) * reverse_k );
    BYTE b = BYTE( GetBValue(clr2) * k + GetBValue(clr1) * reverse_k );

    return RGB(r, g, b);
}

alpha 從 0 到 255 變化,可實現從全透明到不透明的漸變效果。

效果展示

依據上述函數實現的半透明混合效果截圖:

Alpha 混合效果圖

原始碼下載

完整程式碼(含 Demo)下載:test_alpha.rar

測試環境:Windows XP SP2 + VC6.0

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