Я пытаюсь редактировать пиксели 8bpp. Поскольку этот PixelFormat проиндексирован, я знаю, что он использует таблицу цветов для сопоставления значений пикселей. Несмотря на то, что я могу отредактировать растровое изображение, преобразовав его в 24bpp, редактирование 8bpp происходит намного быстрее (13мс против 3мс). Но изменение каждого значения при доступе к растровому изображению 8bpp приводит к некоторым случайным цветам RGB, даже если PixelFormat остается 8bpp.
Я сейчас занимаюсь разработкой на c #, и алгоритм выглядит следующим образом:
(C #)
1 - загрузка оригинального растрового изображения в 8bpp
2 - Создать пустое временное растровое изображение с 8bpp того же размера, что и исходный
3-LockBits обоих растровых изображений и, используя P / Invoke, вызов метода c ++, где я передаю Scan0 каждого объекта BitmapData. (Я использовал метод c ++, так как он предлагает лучшую производительность при итерации по пикселям растрового изображения)
(C ++)
4- Создайте палитру int [256] в соответствии с некоторыми параметрами и отредактируйте байты временного растрового изображения, передавая значения пикселей оригинала через палитру.
(C #)
5 - UnlockBits.
У меня вопрос, как я могу редактировать значения пикселей, не имея странных цветов RGB, или, что еще лучше, редактировать таблицу цветов растрового изображения 8bpp?