【发布时间】:2010-12-25 19:48:13
【问题描述】:
会发生什么(仅在某些图像上明显)是我将看到一个 1 像素的白色边框,其中插入了一个像素。它似乎发生在明亮但不是白色的区域(例如天空)。这类似于某些东西过度锐化并且在高对比度边缘旁边可以看到鬼边框。
这是完美重现它的重现代码。我正在使用所有最高质量的设置进行缩放。
ImageCodecInfo encoder = null;
EncoderParameters encoderParams = null;
foreach (ImageCodecInfo codec in ImageCodecInfo.GetImageEncoders())
{
if (codec.MimeType == "image/jpeg")
{
encoder = codec;
// use highest quality compression settings
encoderParams = new EncoderParameters(1);
encoderParams.Param[0] = new EncoderParameter(Encoder.Quality, 100L);
break;
}
}
using (Bitmap input = (Bitmap)Bitmap.FromFile(inputPath, true))
{
// shrink by multiple of 2
Rectangle rect = new Rectangle(0, 0, input.Width/32, input.Height/32);
using (Bitmap output = new Bitmap(rect.Width, rect.Height))
{
using (Graphics g = Graphics.FromImage(output))
{
// use highest quality settings (updated per Mark Ransom's answer)
g.CompositingMode = CompositingMode.SourceCopy;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
g.SmoothingMode = SmoothingMode.HighQuality;
g.DrawImage(input, rect);
}
output.Save(outputPath, encoder, encoderParams);
}
}
有什么想法吗?我完全感到困惑。我已经阅读了大量的问题/答案,但似乎都没有影响我的情况。
编辑:
这是一个示例之前图片:http://img14.imageshack.us/img14/4174/mg1647.jpg
这是一个示例之后图片:http://img64.imageshack.us/img64/3156/afterringing.jpg
原始文件更明显(在托管服务“优化”它们之前),但您可以在天空中看到较小图像上一个像素的较亮带。
【问题讨论】:
-
我已经仔细阅读了您的描述,您所描述的称为“响铃”。它可以出现在边缘或离它很短的距离。不过,我在您的代码中看不到任何明显的原因。之前/之后的示例图像可能会有所帮助。
-
是的,就好像它正在执行一种锐化算法,试图查看图像边缘以外的像素值。我正在寻找一个发布前后图像的好地方。
-
该示例 after 图像并没有像我在应用程序中看到的那样发音,但您仍然可以看出它是不正确的。