程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 像素疊加實現圖片的半透明混合

像素疊加實現圖片的半透明混合

編輯:關於C++

半透明的混合效果經常在游戲裡看到,效果那叫一個好。有天好奇心起,想琢磨一下這種效果是怎麼實現的。可是自己沒學過數字圖像處理和圖形學,於是只好憑直覺猜測了。

按照生活經驗,將兩個膠片疊在一起時會有半透明效果,於是設想:從位圖A和B中對應位置各取一點Pa、Pb,分別求取Pa和Pb的RGB三個分量,並將對應分量求均值後拼裝成一個新的顏色,這樣就是透明度為一半的混合效果了。按這個思路試了試,發現運氣真好。

實現RGB拼裝的函數很簡單,此處僅說明原理,未作優化:

/**//*
 * alpha mix demo
*/
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的變化,混合效果可以實現全透明--不透明的漸變。依據上述函數實現的半透明混合效果截圖:

程序源代碼(內含demo)下載:http://blog.vckbase.com/Files/HateMath/test_alpha.rar

程序在winXp SP2 + VC6.0下通過。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved