windows Api AlphaBlend的使用方法


 

原文鏈接: http://www.cnblogs.com/sosopop/p/3412962.html

很早的時候公司里開發了個c++客戶端軟件,需要支持windows2000,要求簡單小巧,並且不希望引入其他界面庫,圖形引擎之類的東西,像gdi+之類的,於是對於美工做出來的一些界面,需要有alpha通道的圖片渲染很麻煩,自己寫的效率還有些低.於是從msdn找到了alphablend這個函數,來做圖像的alpha混合,剛開始的時候,以為這個函數只能夠處理整個圖片的整體透明度,不能處理32位圖像每個像素的透明度,后來仔細研究,發現是可以做到的,配置如下參數:

  BLENDFUNCTION _blendfunction = { AC_SRC_OVER, 0, 255, AC_SRC_ALPHA };

  但是渲染出來的顏色總是不對.從網上搜索也找不到答案,后來再仔細研究了下msdn,其中有個單詞引起了我的注意premultiply, 那什么是預乘alpha值呢.我們先看一下alpha混合的公式:

  Color = ( SrcRGB * SrcAlpha ) + ( DestRGB * ( 1 - SrcAlpha ) )

  其中( SrcRGB * SrcAlpha )這一步是在渲染,或者加載之前就可以計算出來的,圖像重新刷新渲染的時候,可以直接使用已經計算好的預乘alpha數值,而不用計算這一步乘法,從而加渲染速度.因此普通包含alpha通道的圖像需要做特殊處理才可以使用alphablend渲染到dc.

  那怎樣將圖像預乘alpha的圖像在渲染前准備好呢?一種是在加載完圖像后遍歷每一個像素,進行alpha預乘運算.還有一種是讓美工直接輸出已經預乘完畢的alpha圖像.第一種方式程序員都會,第二種方式呢,可能程序員和美工都不知道怎么弄,這里講一下第二種方式吧,上圖.

首先加載帶alpha信息的png,或者自己設計的psd

將圖層復制一個新的

選擇剛剛復制的圖層,按ctrl+u,調整明度到100,確定后全選並復制.

在通道面板新建一個通道,然后將剛才復制的白蘋果粘貼到這個新建的通道上

返回圖層面板,刪除掉圖層面板里的白蘋果,並在彩色蘋果下面新建一個圖層,並填充成黑色.

另存為bmp圖像,色彩深度選擇32位,這樣我們就做好了預乘alpha的圖像.

 

這是一個簡單的例子代碼.

http://pan.baidu.com/s/11j9OJ

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM