Как инициализировать 48-битные растровые изображения из RGB?
Я пишу интерпретатор в управляемом C++ для, среди прочего, формата изображения PPM. Спецификация изображения позволяет использовать изображения размером до двух байтов на пиксель на канал или 48-битные на пиксель цветные изображения. Я пытаюсь прочитать этот формат и преобразовать его в растровое изображение.Net, но у меня возникают проблемы с его работой. Когда у меня есть 24-битные изображения на пиксель, я инициализирую их так:
bmp = gcnew Bitmap(width, height);
<for each pixel>
bmp->SetPixel(x, y, Drawing::Color::FromArgb(Convert::ToInt32(fileData[offset]),
Convert::ToInt32(fileData[offset + 1]),
Convert::ToInt32(fileData[offset + 2])));
offset += 3;
Для изображений размером 48 бит на пиксель я инициализировал bmp следующим образом:
bmp = gcnew Bitmap(widht, height, Imaging::PixelFormat::Format48bppRgb);
Однако, при попытке заполнить данные пикселей, я не могу указать какие-либо значения цвета, используя "Color::FromArgb()" со значениями больше 255 для R, G и B. Есть ли способ обойти это ограничение?
1 ответ
System.Drawing может обрабатывать 48- и 64-битные форматы файлов изображений, но он преобразует значения пикселей в 24-битные. Я не знаю ни одного способа сохранить верность полного цвета.
Смотрите раздел Замечания: Перечисление PixelFormat