Сделайте libjpeg и the.Net jpeg-кодек действительно существенно отличается от монохромных данных?
Я работаю с большим количеством монохромных изображений, и сегодня утром я заметил, что существует значительная разница между тем, как libjpeg и кодек .Net jpeg обрабатывают монохромные данные. Похоже, что монохромное изображение, сохраненное при любом качестве с помощью libjpeg и открытое с использованием стандартного .Net jpeg-кодека, на самом деле загружается только с 16 различными оттенками серого, и все промежуточные оттенки отображаются как стиплированные.
Вот гистограмма плавного градиента, сохраненная libjpeg и загружается .net
Гистограмма должна была быть идеально ровной.А вот (увеличенный) пример того, как выглядит этот градиент (он должен быть идеально гладким переходом)
Это должен быть плавный переход от серого 85 слева к серому 136 справа, но только 4 оттенка серого фактически визуализируются, чтобы сделать этот переход.
Мой вопрос в том, сумасшедший ли я, и если нет, то как далеко заходит это несоответствие кодека? Является есть ли хороший обходной путь, если вы используете обе библиотеки в разных программах?
Я не обвиняю ни один кодек, просто указываю на то, что кажется несоответствием. Я заметил это с изображениями, которые, как я знал, были созданы с помощью libjpeg, предположил, что это проблема настройки качества, попытался использовать FastStone image resizer для создания тестовых изображений и получил тот же результат, попытался использовать irfanview и снова получил тот же результат. Поскольку обе эти программы должны использовать некоторую библиотеку jpeg, я склонен предполагать, что они также использование libjpeg и есть подлинный конфликт кодеков.На стороне загрузки я столкнулся с тем же результатом загрузки изображений как с моим собственным кодом .net, так и с использованием Paint.net.
Наконец, вот образец с нормальным разрешением, так что вы можете скачать его и попробовать самостоятельно. Загрузка его в некоторые программы даст вам хороший градиент (например, ваш браузер) , но загрузка его с вашим собственным кодом .Net, или Paint.Net даст вам размытый градиент, как показано выше, используя только 16 оттенков серый.
Кто-нибудь знает больше об этом, как далеко это заходит и какие хорошие обходные пути могут быть?
1 ответ:
Я могу воспроизвести ваши симптомы, открыв образец изображения в версии Paint, поставляемой с Windows 7. Анализ файла показывает, что он является допустимым JPEG, и его правильное отображение в браузере подтверждает это. Похоже, Microsoft действительно сильно облажалась. Он уже был представлен как ошибка:
Http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/9132e2bd-23cc-4e5a-a783-1fa4abe11624/
Обходным путем было бы создать JPEG как полноцветное изображение, но только поместить в него значения пикселей в оттенках серого.