Действительно ли кодек libjpeg и .Net jpeg существенно отличается для монохромных данных? - PullRequest
12 голосов
/ 11 мая 2011

Я работаю с большим количеством данных монохромного изображения, и сегодня утром я заметил, что существует существенная разница между тем, как libjpeg и кодек .Net jpeg обрабатывают монохромные данные.Похоже, что монохромное изображение, сохраненное при ЛЮБОЙ настройке качества с использованием libjpeg и открытое с использованием стандартного кодека .Net jpeg, на самом деле загружается только с 16 различными оттенками серого, а все промежуточные оттенки отображаются как пунктирные.

Вот гистограмма плавного градиента, сохраненная libjpeg и загруженная .net

Histogram of codec conflict affected gradient

Гистограмма должна быть идеально ровной.

А вот (увеличенный) пример того, как выглядит этот градиент (это должен быть совершенно плавный переход) enter image description here

Это должен быть плавный переход от серого 85 слева к серому 136 направильный, но только 4 оттенка серого фактически передается, чтобы сделать этот переход.

Мой вопрос - я сумасшедший, и если не только, насколько далеко идет это несоответствие кодека?Есть ли хороший обходной путь, если вы используете обе библиотеки в разных программах?

Я не виню ни один из кодеков, а просто указываю на несоответствие.Я заметил это с изображениями, которые, как я знал, были созданы с использованием libjpeg, предположил, что это проблема с настройкой качества, попытался использовать средство изменения размера изображения для быстрой установки и получил тот же результат, попытался использовать irfanview и снова получил тот же результат.Поскольку обе эти программы должны использовать некоторую библиотеку jpeg, я склонен полагать, что они также используют libjpeg, и существует подлинный конфликт кодеков.

На стороне загрузки я столкнулся с одним и тем же результатом, загружая изображения с обоими собственными.net код и использование Paint.net.

Наконец, вот пример с нормальным разрешением, так что вы можете скачать его и попробовать сами.Загрузка этого в некоторых программах даст вам хороший градиент (например, ваш браузер), но загрузка его с вашим собственным кодом .Net, или Paint.Net даст вам размытый градиент, подобный приведенному выше, с использованием только 16 оттенков серого.

enter image description here

Кто-нибудь знает больше об этом, как далеко он продвигается и какие могут быть хорошие обходные пути?

1 Ответ

4 голосов
/ 13 мая 2011

Я могу воспроизвести ваши симптомы, открыв образец изображения в версии Paint, поставляемой в комплекте с Windows 7. Анализ файла показывает, что он является допустимым JPEG, и его правильное отображение в браузере подтверждает это.Похоже, Microsoft действительно все испортила.Она уже была отправлена ​​как ошибка:

https://connect.microsoft.com/VisualStudio/feedback/details/597657/grayscale-jpeg-image-read-as-format8bppindexed-but-quantized-as-format4bppindexed#details

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/9132e2bd-23cc-4e5a-a783-1fa4abe11624/

Обходной путь может заключаться в создании JPEG-файла в виде полноцветного изображения, но толькозначения пикселей в градациях серого.

...