Алгоритм фильтра ПНГ ведет себя странно - PullRequest
0 голосов
/ 26 сентября 2019

РЕДАКТИРОВАТЬ: Я понял это.Я должен был вычислить paeth для каждого отдельного байта, а не для всего пикселя.

Я попытался написать свою собственную библиотеку для чтения файлов PNG, однако я столкнулся со странным поведением при попытке фильтрации с помощью Paeth.

---------
| C | B |
---------
| A | x |
---------

Если вы не знали, чтобы вычислить значение пикселя x, алгоритм Паэта вычисляет

p = A + B - C

, а затем выбирает один из пикселей (A, B илиC) который находится ближе всего к p и сохраняет значение

y = x - Paeth(A, B, C)

. Чтобы декодировать изображение, вы должны принять закодированное значение y и добавить Paeth (A, B, C), чтобы получить x.

Вот моя проблема.Кажется, что алгоритм, который кодирует изображение, использует R, G и B. из разных пикселей.

Например, я знаю из GIMP, что пиксель должен быть таким же, как B, но иногда какой бы пиксель я не выбрал,Я могу не получить его равным требуемому пикселю.Как ни странно, это может быть сделано при выборе, скажем, красного значения пикселя A и синего и зеленого значений пикселя B.

Поскольку GIMP отображает изображение правильно, в моем коде должна быть ошибка. НО значения, введенные в функцию, верны, и моя функция Паэта также верна.Я рассчитал это вручную.

Также это происходит только на некоторых изображениях и некоторых пикселях.Опять же, я не знаю, почему.

В чем проблема?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...