Thomas Bandt

Über mich | Kontakt | Archiv

Image-Resizing mit .NET - unschöner Rand ...

Wer mit .NET ein Bild resized, erhält mitunter einen etwas unschönen Rand - vor allem bei Verwendung von InterpolationMode.HighQualityBicubic. Leider produzieren alle anderen Modi nur Bilder von schlechterer Qualität, sodass hierfür ein Workaround her muss.

Lange Rede kurzer Sinn, "Blake" hat eine passende Lösung hier gepostet und auch eine Erklärung mitgeliefert:

"This problem is occuring because you are interpolating your image data to a
new size, but along the edges there are no pixels to interpolate and .NET
uses black pixels for these edges by default"

Mein daraus entstandener (und aus dem Kontext gerissener) C#-Schnipsel:

Size size = new Size(width, height);
Bitmap sourceBitmap = (Bitmap) UploadedImage;
Bitmap targetBitmap = new Bitmap(size.Width, size.Height);
using(Graphics g = Graphics.FromImage(targetBitmap))
{
    g.PixelOffsetMode = PixelOffsetMode.HighQuality;
    using(ImageAttributes ia = new ImageAttributes())
    {
        ia.SetWrapMode(WrapMode.TileFlipXY);
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
        g.DrawImage(sourceBitmap, new Rectangle(0, 0, size.Width, size.Height), 0, 0, sourceBitmap.Width,
                    sourceBitmap.Height, GraphicsUnit.Pixel, ia);
    }
}
UploadedImage.Dispose();
UploadedImage = targetBitmap;

HTH



« Zurück  |  Weiter »