The following function can be used to resize images on your machine. Note that this function works out the image format internally and creates a file of the same format. You may want to adjust this to output a file of a different format.
/// <summary>
/// This function can be used to resize images, while retaining image quality
/// that cannot be done when using the GetThumbnailImage method.
/// </summary>
/// <param name="sourceImgPath">Path to the source image</param>
/// <param name="outputImgPath">Path to the output image</param>
/// <param name="width">Width of the output image</param>
/// <param name="height">height of the output image</param>
/// <param name="quality">Quality (valid values 0 - 100)</param>
private void ResizeImage(string sourceImgPath, string outputImgPath, int width, int height, long quality)
{
ImageCodecInfo codecInfo = null;
Bitmap bIn = new Bitmap(sourceImgPath, true);
// get the correct encoder information
Guid formatGuid = bIn.RawFormat.Guid;
ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();
for(int i=0; i<encoders.Length; i++)
{
if (encoders[i].FormatID == formatGuid)
{
codecInfo = encoders[i];
}
} if (codecInfo == null) throw new Exception("Unable to find image encoder for file " + sourceImgPath);
// now resize the image
EncoderParameters encoderParams = new EncoderParameters(1);
encoderParams.Param[0] = new EncoderParameter(Encoder.Quality, quality);
Bitmap bOut = ScaleImage(bIn, width, height, quality);
bOut.Save(outputImgPath, codecInfo, encoderParams);
bIn.Dispose();
bOut.Dispose();
}
The following scaling function is also required:
private Bitmap ScaleImage(Bitmap bitmap, int width, int height, long quality)
{
Bitmap bOut = new Bitmap(width, height);
Graphics g = Graphics.FromImage(bOut);
g.SmoothingMode = SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(bitmap, 0, 0, width, height);
g.Dispose();
return bOut;
}