2011-01-11 89 views
0

我將不勝感激你水平低的程序員的幫助...我的問題是這樣的: 我想直接打印格式ARGB8888的位圖到顯存。位圖的形式是好的,問題是我無法弄清楚如何使用的alpha通道。我已經看到了維基百科的代碼覆蓋這樣的像素:如何直接在內存中處理來自PNG的alpha透明度?

CompositedPixelColor = Alpha * ForegroundPixelColor + (1 - Alpha) * BackgroundPixelColor 

其中一個顏色從0變化 - 1.這是每個通道RG B. 做什麼我做的就是複製每個字節的我的位圖的每個像素的每種顏色都使用上面的公式直接顯示到視頻內存中,但是我錯過了一些東西,因爲顏色並沒有呈現出來。

我試圖做這樣的事情張貼在這個線程的代碼: http://www.badadev.com/create-a-photo-editing-app/ 但在這裏,他們不把透明的,那就是我的問題。 Thanxs!

回答

0

在您發佈阿爾法代碼被視爲0和1之間的值,當然,如果您使用您的alpha通道爲unsigned char,使用下面的,如果你想這樣做在整數空間不起作用:

unsigned short background = 0x40; 
unsigned short foreground = 0xe0; 
unsigned short alpha = 0xc0; 
unsigned short compositedcolor = (alpha * foreground + (0xff - alpha) * background) >> 8; 

請注意,當這些空頭的值都應該是0 - 255,短的只需要作爲字符*焦炭產品的計算空間,你也可以使用中間類型轉換,但我只是用無符號所有的簡短類型使其更具可讀性。

+0

噢,thanx的小費。我想通了但問題。 RGBA值以ABGR格式存儲在內存中。但是,你的代碼讓我想起的東西,應該提高計算:>> 8 THX很多 – HugoFS 2011-01-13 12:11:58