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;
}
| Title | Date |
| Node.js + Express: How to Block Requests by User-Agent Headers | January 7, 2026 |
| Vault 3 is Now Available for Windows on ARM Machines! | December 13, 2025 |
| Vault 3: How to Include Outline Text in Exported Photos | October 26, 2025 |
| .NET Public-Key (Asymmetric) Cryptography Demo | July 20, 2025 |
| Raspberry Pi 3B+ Photo Frame | June 17, 2025 |
| EBTCalc (Android) Version 1.53 is now available | May 19, 2024 |
| Vault 3 Security Enhancements | October 24, 2023 |