Отображение неправильного цвета PPM - PullRequest
0 голосов
/ 27 мая 2020

Я получаю странные результаты при отображении PPM:

pixeldisplay

(на самом деле это масштабированный PNG)

И вот что за файл выглядит так:

textdisplay

Размеры хорошие (10 строк, 8 столбцов), только цвета неправильные (или я ошибаюсь?).

Как сказано в 3-й строке файла, я хочу использовать значение от 0 до 255 для каждого канала. Использование обычного цветового пространства RGB, например (255, 255, 255) для белого, (0, 0, 0) для черного, (255, 0, 0) для красного и т. Д. Но эти цвета на изображении явно не такие, как в файле.

Уже на первый взгляд изображение кажется слишком темным.

Я неправильно понимаю формат? Файл не интерпретируется таким образом?

1 Ответ

0 голосов
/ 27 мая 2020

Этот документ: http://netpbm.sourceforge.net/doc/ppm.html описывает формат изображения PPM.

Когда значение «magi c» P6 находится в начале файла, цвет пикселей хранится как двоичные данные. Цитата из ранее упомянутого документа (выделено мной):

[...] Растр строк высоты в порядке сверху вниз. Каждая строка состоит из пикселей ширины в порядке слева направо. Каждый пиксель представляет собой тройку образцов красного, зеленого и синего цветов в указанном порядке. Каждая выборка представлена ​​в чистом двоичном формате 1 или 2 байтами . Если Maxval меньше 256, это 1 байт. В противном случае это 2 байта. Самый старший байт - первый.

Файл, показанный спрашивающим, кажется, вместо этого содержит их десятичное текстовое представление.

Итак, строка "\n224 93 229..." (да, я подозреваю, что windows конечная строка "\r\n") интерпретируется как (при условии, что файл был сохранен в формате ASCII) {10, 50, 50}, {50, 32, 32}, {57, 51, 32}, ....

Обратите внимание на пиксель blacki sh в середине, который, вероятно, соответствует концу первой строки, он может быть {13, 10, 32} ("\r\n ").

Если вы измените значение magi c на P3, оно должно интерпретироваться правильно.

...