Joh*_*son 12 .net jpeg image image-processing libjpeg
我使用了大量的单色图像数据,今天早上我注意到libjpeg和.Net jpeg编解码器处理单色数据的方式之间似乎存在显着差异.看来使用libjpeg以任意质量设置保存并使用默认.Net jpeg编解码器打开的单色图像实际上只加载了16种不同的灰度,所有中间色调都呈现为点状.
这是由libjpeg保存并由.net加载的平滑渐变的直方图

直方图应该是完全水平的.
这里是一个(放大)渐变样本的样本(它应该是一个非常平滑的过渡)

这应该是从左边的灰色85到右边的灰色136的平滑过渡,但实际上只渲染了4个灰度,以进行过渡.
我的问题是我疯了,如果不是这个编解码器差异到底有多远?如果您在不同的程序中使用这两个库,是否有一个很好的解决方法?
我不是要责怪编解码器,只是指出看似差异的东西.我注意到这一点,我知道使用libjpeg创建的图像,假设这是一个质量设置问题,尝试使用faststone图像缩放器来创建测试图像并获得相同的结果,尝试使用irfanview并再次获得相同的结果.由于这两个程序都必须使用一些jpeg库,我倾向于认为它们也使用libjpeg并且存在真正的编解码器冲突.
在加载方面,我遇到了使用我自己的.net代码和使用Paint.net加载图像的相同结果.
最后,这是一个正常分辨率的示例,因此您可以下载并自行尝试.在一些程序中加载它会给你一个很好的渐变(例如你的浏览器),但用你自己的.Net代码加载它,或者Paint.Net会给你一个抖动的渐变,就像上面使用16种灰度渲染一样.

有没有人更多地了解这一点,它有多远,有什么好的解决方法?
我可以通过在 Windows 7 捆绑的 Paint 版本中打开示例图像来重现您的症状。分析该文件表明它是有效的 JPEG,并且让它在浏览器中正确显示也证实了这一点。看来微软真的搞砸了。它已经作为错误提交:
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/9132e2bd-23cc-4e5a-a783-1fa4abe11624/
解决方法是将 JPEG 创建为全彩色图像,但仅将灰度像素值放入其中。
| 归档时间: |
|
| 查看次数: |
818 次 |
| 最近记录: |