使用GDI+進行alpha混合

來源:互聯網
上載者:User

阿爾法混合(Alpha Blend)的數學公式:
displayColor = sourceColor × alpha / 255 + backgroundColor × (255 – alpha) / 255

 

VOID AlphaBlend_1()<br />{<br />Bitmap bitmap(L"Demo.jpg");<br />INT iWidth = bitmap.GetWidth();<br />INT iHeight = bitmap.GetHeight();</p><p>Color color;<br />Color colorTemp;</p><p>for ( INT iRow = 0; iRow<iHeight; iRow++ )<br />{<br />for ( INT iColumn = 0; iColumn<iWidth; iColumn++ )<br />{<br />bitmap.GetPixel(iColumn, iRow, &color);</p><p>colorTemp.SetValue(color.MakeARGB(<br />(BYTE)(128), //表示:Alpha混合程度(可以理解為透明度)<br />color.GetRed(),<br />color.GetGreen(),<br />color.GetBlue())<br />);</p><p>bitmap.SetPixel(iColumn, iRow, colorTemp);<br />}<br />}</p><p>//此時,bitmap就是一幅半透明的圖片了<br />}

 

void AlphaBlend_2(HDC hdc)<br />{<br />ColorMatrix colorMatrix = {<br />1.0f, 0.0f, 0.0f, 0.0f, 0.0f,<br />0.0f, 1.0f, 0.0f, 0.0f, 0.0f,<br />0.0f, 0.0f, 1.0f, 0.0f, 0.0f,<br />0.0f, 0.0f, 0.0f, 0.5f, 0.0f, //這一行的第4列的值(在此為0.5,有效範圍[0,1])表示Alpha混合程度(可以理解為透明度)<br />0.0f, 0.0f, 0.0f, 0.0f, 1.0f<br />};</p><p>ImageAttributes imageAtt;<br />imageAtt.SetColorMatrix(&colorMatrix, ColorMatrixFlagsDefault, ColorAdjustTypeBitmap);</p><p>Bitmap bitmap(L"Demo.jpg");<br />INT iWidth = bitmap.GetWidth();<br />INT iHeight = bitmap.GetHeight();</p><p>Graphics graphics(hdc);</p><p>//將bitmap以半透明的形式繪製出來<br />graphics.DrawImage(<br />&bitmap,<br />Rect(10, 10, iWidth, iHeight),<br />0,<br />0,<br />iWidth,<br />iHeight,<br />UnitPixel,<br />&imageAtt<br />);<br />}

 

小記:

    其實Alpha混合最精華的地方就是文章開頭給出的那個數學公式,即使沒有GDI+提供的這些函數,你也完全可以自己把兩幅要進行Alpha混合的圖片的像素點逐個取出來,然後按照公式計算出結果像素,最後再組合成一幅圖,就可以了。

    當然,有方便的工具當然是要用的了,借用一句古文中的話,就是“君子生非異也,善假於物也”。最後,我認為,工具是要用,但最好還是要知道為什麼,理解其具體的原理,知其然還要知其所以然嘛。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.