Eric Bergman-Terrell's Blog

.NET Programming Tip: How to Attractively Scale Bitmaps
October 4, 2010

By default, the Graphics.DrawImage method scales Bitmaps efficiently but unattractively. To avoid ugly aliasing ("jaggies"), set the Graphics object's SmoothingMode, PixelOffsetMode, CompositingQuality, and InterpolationMode to high quality:

public static Bitmap Scale(Bitmap Bitmap, float ScaleFactorX, float ScaleFactorY)
{
    int scaleWidth  = (int)Math.Max(Bitmap.Width  * ScaleFactorX, 1.0f);
    int scaleHeight = (int)Math.Max(Bitmap.Height * ScaleFactorY, 1.0f);

    Bitmap scaledBitmap = new Bitmap(scaleWidth, scaleHeight);

    // Scale the bitmap in high quality mode.
    using (Graphics gr = Graphics.FromImage(scaledBitmap))
    {
        gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
        gr.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
        gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
        gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;

        gr.DrawImage(Bitmap, new Rectangle(0, 0, scaleWidth, scaleHeight), new Rectangle(0, 0, Bitmap.Width, Bitmap.Height), GraphicsUnit.Pixel);
    }

    // Copy original Bitmap's EXIF tags to new bitmap.
    foreach (PropertyItem propertyItem in Bitmap.PropertyItems)
    {
        scaledBitmap.SetPropertyItem(propertyItem);
    }

    return scaledBitmap;
}
Keywords: Graphics, Bitmap, Scaling, System.Drawing.2D, SmoothingMode, PixelOffsetMode, CompositingQuality, InterpolationMode, Graphics.DrawImage, aliasing, jaggies

Reader Comments

Comment on this Blog Post

Recent Posts

TitleDate
.NET Public-Key (Asymmetric) Cryptography DemoJuly 20, 2025
Raspberry Pi 3B+ Photo FrameJune 17, 2025
EBTCalc (Android) Version 1.53 is now availableMay 19, 2024
Vault 3 Security EnhancementsOctober 24, 2023
Vault 3 is now available for Apple OSX M2 Mac Computers!September 18, 2023
Vault (for Desktop) Version 0.77 ReleasedMarch 26, 2023
EBTCalc (Android) Version 1.44 is now availableOctober 12, 2021