Создать собственную палитру для WritableBitmap из 256 цветов

Теперь я искал почти час и просто не мог найти ответ. В настоящее время я работаю над программой, которая отображает пользовательское изображение (используя WritableBitmap) либо в оттенках серого, либо в цветовой гамме с 256 предопределенными цветами.

Входными данными для изображения будет массив байтов (который отлично работает, если я установил для свойства PixelFormat значение PixelFormats.Gray8), но, поскольку мне тоже нужна настраиваемая цветовая шкала, я хотел бы создать настраиваемые шкалы (один для серого и один для одного или больше для цветов). Я думаю, что мне нужно использовать свойство PixelFormat.Indexed8, но я просто не могу понять, как его использовать и как создать собственную цветовую палитру, а Интернет совсем не помог в ее создании.

1 ответ

Решение

Вы можете создать кастом 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(...);
Другие вопросы по тегам