2012-08-31 56 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之间的索引确定。 –