var newBitMap = new Bitmap(newSize.Width, newSize.Height, PixelFormat.Format32bppArgb);
var g = Graphics.FromImage(newBitMap);
g.FillRegion(new SolidBrush(Color.FromArgb(0, Color.White)), g.Clip);
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
g.DrawImage(b, 0, 0, newSize.Width, newSize.Height);
var ep = new EncoderParameters();
ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, PictureManager.ImageQuality);
//newBitMap.Save(Path.Combine(PictureManager.LocalThumbImagePath, localFilename), getImageCodeInfo("image/jpeg"), ep);
newBitMap.Save(Path.Combine(PictureManager.LocalThumbImagePath, localFilename), ImageFormat.Png);
newBitMap.Dispose();
b.Dispose();
Ideally it would look at the lastPart variable and use either the jpeg (commented out above) or png line depending on the source and desired output image.
For best results, the above code is also needed in these 3 methods:
PictureManager.GetPictureUrl(Picture picture, int TargetSize, bool showDefaultPicture)
PictureManager.GetDefaultPictureUrl(PictureTypeEnum DefaultPictureType, int TargetSize)
PictureManager.ValidatePicture(byte[] PictureBinary)