Что происходит (только заметное на определенных изображениях), я увижу белую рамку с 1 пикселем, которая будет вставлена на один пиксель. Это происходит в областях, которые светлые, но не белые (например, небо). Это похоже на то, что что-то перечеркнуто, а призрачная граница видна рядом с высококонтрастными краями.Призрачные границы («звонок») при изменении размера в GDI +
Вот и воспроизводимый код, который воспроизводит его отлично. Я использую все настройки самого высокого качества для масштабирования.
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);
}
}
Любые идеи? Я полностью сбит с толку. Я прочитал тонну вопросов/ответов, и ни один из них, похоже, не повлиял на мою ситуацию.
Edit:
Это пример перед тем изображение: http://img14.imageshack.us/img14/4174/mg1647.jpg
Это пример после изображения: http://img64.imageshack.us/img64/3156/afterringing.jpg
Это более выражено с оригиналом файлов (до того, как служба хостинга «оптимизирует» их), но вы можете видеть в e небо более светлая полоса на один пиксель на меньшем изображении.
Я читал ваше описание немного более тщательно, и то, что вы описываете, называется «звон». Он может появляться прямо на краю или на очень коротком расстоянии от него. Однако я не вижу ничего очевидного в вашем коде, которое могло бы вызвать его. Образцы изображений до/после могут помочь. –
Да, это похоже на то, что он выполняет алгоритм заточки, который пытается посмотреть на значения пикселей за пределами края изображения.Я пытаюсь найти хорошее место для публикации изображений до/после. – mckamey
Этот образец * после * изображения не показывает его так ярко, как я вижу его в своем приложении, но вы все еще можете сказать, что это неправильно. – mckamey