我试图做一些简单的图像处理与WPF成像部件的工作。 我大致如下的MS文章如何编码和解码JPEG图像 。
我的代码很简单:
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.UriSource = new Uri("D:\\Temp\\StackOverflowCapture.png");
//bi.DecodePixelWidth = 1024;
//bi.DecodePixelHeight = 768;
bi.EndInit();
var jpg = new JpegBitmapEncoder();
jpg.QualityLevel = 90;
//jpg.FlipHorizontal = false;
//jpg.FlipVertical = false;
jpg.Frames.Add(BitmapFrame.Create(bi));
var fs = new FileStream("D:\\Temp\\StackOverflow_Result.jpg", FileMode.Create);
jpg.Save( fs );
jpg = null;
该代码段创建奇数伪影,其中最后几个“行”是固体灰块。 这几乎就像如果编码器刚跑出像素写的。 灰的量2倍或3x取决于我作为输入(各种分辨率,JPEG,PNG)或I启用(迫使上解码的分辨率)的选项使用图像上的一个因素而变化。 最终的效果是一样的,但是,你可以从下面的图片中看到的。
我的源图像是:
输出图像(注意在底部的灰色条带):
这里发生了什么? 我如何得到一个干净的转换?