C # - Как преобразовать изображение в 8-битное цветное изображение? - PullRequest
1 голос
/ 19 ноября 2009

Мне нужно преобразовать изображение PNG, загруженное из файла, в массив байтов 8 бит на пиксель, используемый другим устройством (встроенное программирование).

Я копирую пиксель за пикселем в новое изображение, созданное в 16-битном цвете - Format16bppRgb565, но мне нужно Format8bpp, которого нет в .NET Framework. (Я не могу использовать Format8bppIndexed, поскольку другое устройство не может обрабатывать индексированные растровые изображения)

 Bitmap img = new Bitmap(imgPath);
 Bitmap img8 = new Bitmap(imgW, imgH, PixelFormat.Format16bppRgb565);
 for (int I = 0; I <= img.Width - 1; I++) {
     for (int J = 0; J <= img.Height - 1; J++) {
         img8.SetPixel(I, J, img.GetPixel(I, J));
     }
 }

Так как же я могу преобразовать изображение в массив размером 8 бит на пиксель?

  • Можно ли использовать 8-битный индексированный формат и извлечь байты? - Format8bppIndexed
  • Можно ли рассчитать цвета пикселей, уменьшив 32-битные значения цветов R, G, B до 8-битных?
  • Есть ли библиотека C #, которая уже делает это?
  • «Самый простой способ - создать новое 8-битное растровое изображение и нарисовать на нем 24-битное изображение». - как?

Ответы [ 2 ]

1 голос
/ 19 ноября 2009

Хотя я не уверен, как это сделать с простым ванильным C #, вы можете использовать библиотеки FreeImage Project для преобразования форматов изображений:

FreeImage - библиотека с открытым исходным кодом. проект для разработчиков, которые хотели бы поддерживать популярное графическое изображение форматы, такие как PNG, BMP, JPEG, TIFF и другие по мере необходимости в современных мультимедиа Приложения. FreeImage легко использовать, быстрый, многопоточный сейф, совместим со всеми 32-битными версиями Windows и кроссплатформенный (работает как с Linux, так и с Mac OS X).

Он написан на C ++, но имеет хорошие .NET-оболочки, которые вы можете использовать.

0 голосов
/ 26 декабря 2011

Я уже делал это в одном проекте распознавания образов. При поиске некоторых книг по обработке изображений и распознаванию образов вы можете найти эти решения.

a) Если вы хотите преобразовать в оттенки серого, вы можете найти в общем два решения.

# 1 Усреднение каналов RGB. - Вы можете взять 8-битные значения для каждого отдельного канала и рассчитать пиксель = (R + G + B) / 3

# 2 Возьмите только зеленый компонент. Лучше всего смотреть.

b) Если вы хотите преобразовать в 8-битное представление цветов, вам нужно использовать таблицу цветов. Вы можете увидеть решение здесь http://www.codeproject.com/KB/graphics/Image_Bitdepth_Conversion.aspx

...