Lo que sucede (solo perceptible en ciertas imágenes) es que veré un borde blanco de 1 píxel que se inserta en un píxel. Parece suceder en áreas que son claras pero no blancas (por ejemplo, el cielo). Es similar a cuando algo está sobreajustado y se puede ver un borde fantasma al lado de bordes de alto contraste.Ghost-borders ('ringing') al redimensionar en GDI +
Aquí está el código de reproducción que lo reproduce perfectamente. Estoy usando todos los ajustes de mayor calidad para escalar.
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);
}
}
¿Alguna idea? Estoy completamente desconcertado. He leído un montón de preguntas/respuestas y ninguna de ellas parece afectar mi situación.
Editar:
Este es un ejemplo antes imagen: http://img14.imageshack.us/img14/4174/mg1647.jpg
Este es un ejemplo después de imagen: http://img64.imageshack.us/img64/3156/afterringing.jpg
Es más pronunciado con el original archivos (antes de que el servicio de alojamiento los "optimice"), pero puede ver en e cielo una banda más clara de un píxel en la imagen más pequeña.
He leído su descripción con un poco más de cuidado, y lo que está describiendo se llama "timbre". Puede aparecer justo en el borde o a una distancia muy corta de él. Sin embargo, no puedo ver nada obvio en tu código que lo cause. Las imágenes de muestra antes/después pueden ayudar. –
Sí, es como si estuviera haciendo un algoritmo de nitidez que trata de ver los valores de los píxeles más allá del borde de la imagen.Estoy tratando de encontrar un buen lugar para publicar las imágenes antes/después. – mckamey
Esa muestra * después * de la imagen no la muestra del todo tan pronunciada como la veo en mi aplicación, pero aún puede decir que no es correcta. – mckamey