Bordas fantasmas ('toque') ao redimensionar em GDI +
O que acontece (somente perceptível em certas imagens) é que eu vejo uma borda branca de 1 pixel que é inserida em um pixel. Parece acontecer em áreas claras, mas não brancas (por exemplo, o céu). É semelhante a quando algo é excessivamente aberto e uma borda fantasma pode ser vista ao lado de bordas de alto contraste.
Aqui está o código de reprodução que o reproduz perfeitamente. Estou usando todas as configurações de qualidade mais altas para escalonamento.
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);
}
}
Alguma ideia? Estou completamente perplexo. Eu li uma tonelada de perguntas / respostas e nenhuma delas parece afetar minha situação.
Editar:
Isto é um exemploantes imagem:http://img14.imageshack.us/img14/4174/mg1647.jpg
Isto é um exemplodepois de imagem:http://img64.imageshack.us/img64/3156/afterringing.jpg
É mais pronunciado com os arquivos originais (antes que o serviço de hospedagem os "otimize"), mas você pode ver no céu uma faixa mais clara de um pixel na imagem menor.