Как инициализировать 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

Другие вопросы по тегам