2012-12-11 217 views
2

首先,我解釋了我想要做的事情,只是在有人提出更好的方法的情況下 我需要使用photoshop中的「顏色」階梯混合太多圖像(您知道,混合方法:屏幕,硬光,顏色...)WPF WriteableBitmap透明度問題

因此,我有我的基礎圖像(PNG)和WriteableBitmap生成執行時間(讓我們稱之爲顏色掩碼)。然後我需要使用「顏色」方法混合這兩個圖像,並在UI組件中顯示結果。

到目前爲止,我嘗試的只是在WriteableBitmap上繪製事物,但我面對Alpha通道的意外行爲。

我迄今爲止代碼:

// variables declaration 
WriteableBitmap img = new WriteableBitmap(width, height, 96,96,PixelFormats.Bgra32,null); 
pixels = new uint[width * height]; 

//function for setting the color of one pixel 
private void SetPixel(int x, int y, Color c) 
    { 
     int pixel = width * y + x; 

     int red = c.R; 
     int green = c.G; 
     int blue = c.B; 
     int alpha = c.A; 

     pixels[pixel] = (uint)((blue << 24) + (green << 16) + (red << 8) + alpha); 

    } 

//function for paint all the pixels of the image 
private void Render() 
    { 
     Color c = new Color(); 
     c.R = 255; c.G = 255; c.B = 255; c.A = 50; 
     for (int y = 0; y < height; y++) 
      for (int x = 0; x < width; x++) 
       SetPixel(x, y, c); 



     img.WritePixels(new Int32Rect(0, 0, width, height), pixels, width * 4, 0); 
     image1.Source = img; // image1 is a WPF Image in my XAML 
    } 

每當我運行的顏色C.A = 255的代碼中,我得到預期的結果。整個圖像設置爲所需的顏色。但是如果我將c.A設置爲不同的值,我會得到奇怪的東西。 如果我把顏色設置爲BRGA = 0,0,255,50,我會得到一個幾乎黑色的深藍色。如果我將它設置爲BRGA = 255,255,255,50,我會得到一個黃色的...

任何線索!?!?!

在此先感謝!

回答

2

你的顏色成分的順序更改爲

pixels[pixel] = (uint)((alpha << 24) + (red << 16) + (green << 8) + blue); 
+0

呀!小混亂hehehehe它現在就像一個魅力!!非常感謝 ! – javirs

+0

完全可以理解,當他們在枚舉上錯誤地編寫顏色組件時。 – Andy