Подтвердить что ты не робот

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

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

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

Histogram of codec conflict affected gradient

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

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

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

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

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

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

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

enter image description here

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

4b9b3361

Ответ 1

Я могу воспроизвести ваши симптомы, открыв образец изображения в версии 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 в виде полноцветного изображения, но в него будут помещаться только значения оттенков серого.