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
Get JetBrains IDEs to Remember Subversion (SVN) CredentialsNovember 3, 2026
Converting a Thinkpad from Windows 11 to Linux MintOctober 29, 2026
Raspberry Pi Camera Trap and Animal Detection ProgramAugust 29, 2026
Python Tip: Fix Incorrect Orientation of Digital PhotosAugust 8, 2026
EBT Weather is now available for Windows and LinuxMay 30, 2026
Node.js + Express: How to Block Requests by User-Agent HeadersJanuary 7, 2026
Vault 3 is Now Available for Windows on ARM Machines!December 13, 2025