2012-08-31 53 views
1

我現在一直在尋找近一個小時,但找不到答案。我目前正在開發一個程序,用256種預定顏色以灰度或色彩顯示自定義圖像(使用WritableBitmap)。從256色創建WritableBitmap的自定義調色板

圖像的輸入將是一個字節數組(如果將PixelFormat屬性設置爲PixelFormats.Gray8,則工作正常),但由於我也需要自定義色階,因此我想創建自定義比例(一個灰色和一個或多個顏色)。我認爲我需要使用的是PixelFormat.Indexed8屬性,但我根本找不到如何使用它以及如何創建自定義調色板,而互聯網對於如何創建自定義調色板並無幫助。

回答

3

您可以創建自定義BitmapPalette並將其應用到一個新的WriteableBitmap

var myPalette = new BitmapPalette(new List<Color> 
{ 
    Colors.Red, 
    Colors.Blue, 
    Colors.Green, 
    // ... 
}); 

var writeableBitmap = new WriteableBitmap(
    width, 
    height, 
    96, 
    96, 
    PixelFormats.Indexed8, // Paletted bitmap with 256 colours 
    myPalette); 

writeableBitmap.WritePixels(...); 
+0

謝謝你的答案。好的,是的,在某些時候我已經看到了,但是如何設置256種顏色以及256個指數? 我的意思是Colors.Red很簡單,但我需要添加例如Color.Fromrgb(100,100,100)等...... – phil13131

+0

要獲得灰色的列表,請使用:var myPalette = new BitmapPalette(Enumerable .Range(0,256).Select(c => Color.FromRgb((byte)c,(byte)c,(byte)c))。ToList());' –

+0

@ phil13131您可以添加任何你喜歡的顏色到你的調色板。我使用基本顏色來保持示例簡單,但也可以使用指定的顏色通道值創建顏色。調色板中的每種顏色都由它的索引號來標識,該索引號對應於其在調色板陣列中的位置。在這種情況下,顏色由調色板數組中0到255之間的索引確定。 –