C# 为256色可写位图创建自定义调色板

C# 为256色可写位图创建自定义调色板,c#,wpf,bitmap,palette,C#,Wpf,Bitmap,Palette,我已经找了将近一个小时了,就是找不到答案。我目前正在开发一个程序,该程序以灰度或256种预定颜色的色阶显示自定义图像(使用可写位图) 图像的输入将是一个字节数组(如果我将PixelFormat属性设置为PixelFormats.Gray8,则效果很好),但由于我也需要自定义颜色比例,因此我希望创建自定义比例(一个用于灰色,一个或多个用于颜色)。我想我需要使用的是PixelFormat.Indexed8属性,但我无法找到如何使用该属性以及如何创建自定义调色板,而互联网对如何创建调色板毫无帮助。您可

我已经找了将近一个小时了,就是找不到答案。我目前正在开发一个程序,该程序以灰度或256种预定颜色的色阶显示自定义图像(使用可写位图)

图像的输入将是一个字节数组(如果我将PixelFormat属性设置为PixelFormats.Gray8,则效果很好),但由于我也需要自定义颜色比例,因此我希望创建自定义比例(一个用于灰色,一个或多个用于颜色)。我想我需要使用的是PixelFormat.Indexed8属性,但我无法找到如何使用该属性以及如何创建自定义调色板,而互联网对如何创建调色板毫无帮助。

您可以创建自定义调色板并将其应用于新的:

var mypalete=新位图调色板(新列表)
{ 
颜色,红色,
颜色,蓝色,
颜色,绿色,
// ...
});
var writeableBitmap=新的writeableBitmap(
宽度,
高度,
96, 
96, 
PixelFormats.Indexed8,//256色调色板位图
我的调色板);
writeableBitmap.WritePixels(…);

谢谢您的回答。好的,是的,我在某一点上看到了,但是我如何设置256种颜色和相应的256个索引?我的意思是颜色。红色很简单,但我需要添加例如Color.Fromrgb(100100100)等…要获得灰色的列表,请使用以下命令:
var myPalette=new BitmapPalette(Enumerable.Range(0256)。选择(c=>Color.Fromrgb((byte)c,(byte)c,(byte)c)).ToList()
@phil13131您可以在调色板中添加任何喜欢的颜色。我使用基本颜色使示例保持简单,但也可以使用指定的颜色通道值创建颜色。调色板中的每种颜色都由其索引号标识,索引号对应于其在调色板数组中的位置。在这种情况下,颜色是由调色板数组中0到255之间的索引决定的。谢谢,我实际上发现我也可以简单地使用
颜色。从RGB(…)
而不是
颜色。红色
我将看到什么效果最好@再次感谢你的回答。我甚至不认为索引(非常明显的是)当然仅仅是添加颜色的顺序。
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(...);