C # - Как преобразовать изображение в 8-битное цветное изображение?
-
21-09-2019 - |
Вопрос
Мне нужно преобразовать изображение 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-битное изображение". - как?
Решение
Хотя я не уверен, как это сделать с помощью простого ванильного C #, вы можете использовать Проект свободного изображения библиотеки для преобразования форматов изображений:
Freeimage в это библиотека с открытым исходным кодом проект для разработчиков, которые хотели бы поддержка популярных графических изображений форматов, таких как PNG, BMP или файлы JPEG, TIFF и другим по мере необходимости с помощью современных мультимедийных приложения.FreeImage прост в использовании, быстр, безопасен для многопоточности, совместим со всеми 32-разрядными версиями Windows и кроссплатформенен (работает как с Linux, так и с Mac OS X).
Он написан на C ++, но имеет хорошие .Вы можете использовать сетевые оболочки.
Другие советы
Я уже делал это в одном проекте по распознаванию образов.Просматривая некоторые книги по обработке изображений и распознаванию образов, вы можете найти эти решения.
а) Если вы хотите преобразовать в оттенки серого, вы можете найти, в общем, два решения.
#1 Усреднение каналов RGB.- Вы можете взять 8-битные значения для каждого отдельного канала и вычислить пиксель = ( R + G + B ) / 3
#2 Берите только Зеленый компонент.Это лучше всего просматривается.
б) Если вы хотите преобразовать в 8-битное цветовое представление, вам необходимо использовать таблицу цветов.Вы можете увидеть решение здесь http://www.codeproject.com/KB/graphics/Image_Bitdepth_Conversion.aspx