Was passiert (nur auf bestimmten Bildern bemerkbar) ist, ich sehe eine 1 Pixel weiße Grenze, die ein Pixel eingefügt ist. Es scheint in Bereichen zu passieren, die hell sind, aber nicht weiß (z. B. der Himmel). Es ist ähnlich, wenn etwas übermäßig scharf ist und eine Geistergrenze neben kontrastreichen Kanten zu sehen ist.Ghost-Grenzen ('Klingeln') beim Ändern der Größe in GDI +
Hier ist der Reprocode, der es perfekt reproduziert. Ich verwende die höchsten Qualitätseinstellungen für die Skalierung.
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);
}
}
Irgendwelche Ideen? Ich bin völlig verwirrt. Ich habe eine Menge Fragen/Antworten gelesen und keiner von ihnen scheint meine Situation zu beeinflussen.
bearbeiten:
Dies ist ein Beispiel vor Bild: http://img14.imageshack.us/img14/4174/mg1647.jpg
Dies ist ein Beispiel nach Bild: http://img64.imageshack.us/img64/3156/afterringing.jpg
Es ist ausgeprägter mit dem Original Dateien (bevor der Hosting-Service sie "optimiert"), aber Sie können in th sehen e Himmel ein helleres Band ein Pixel auf dem kleineren Bild.
Ich habe Ihre Beschreibung ein wenig genauer gelesen, und was Sie beschreiben, heißt "Klingeln". Es kann sich direkt am Rand oder in sehr kurzer Entfernung von ihm zeigen. Ich kann jedoch nichts Offensichtliches in deinem Code sehen, das dies verursachen würde. Beispielbilder Vorher/Nachher könnten helfen. –
Ja, es ist so, als würde es einen Schärfungsalgorithmus machen, der versucht, die Werte von Pixeln über den Rand des Bildes hinaus zu betrachten.Ich versuche, einen guten Platz zu finden, um die Vorher-Nachher-Bilder zu posten. – mckamey
Das Beispiel * nach * Bild zeigt es nicht ganz so ausgeprägt, wie ich es in meiner Anwendung sehe, aber Sie können immer noch sagen, dass es nicht richtig ist. – mckamey