Fixed image processing on images with indexed pixel formats

This commit is contained in:
LukePulverenti Luke Pulverenti luke pulverenti 2012-09-06 12:00:36 -04:00
parent 94c8332e26
commit 8775498732

View File

@ -23,10 +23,22 @@ namespace MediaBrowser.Api
Size newSize = DrawingUtils.Resize(originalImage.Size, width, height, maxWidth, maxHeight);
Bitmap thumbnail = new Bitmap(newSize.Width, newSize.Height, originalImage.PixelFormat);
Bitmap thumbnail;
// Graphics.FromImage will throw an exception if the PixelFormat is Indexed, so we need to handle that here
if (originalImage.PixelFormat.HasFlag(PixelFormat.Indexed))
{
thumbnail = new Bitmap(originalImage, newSize.Width, newSize.Height);
}
else
{
thumbnail = new Bitmap(newSize.Width, newSize.Height, originalImage.PixelFormat);
}
thumbnail.SetResolution(originalImage.HorizontalResolution, originalImage.VerticalResolution);
Graphics thumbnailGraph = Graphics.FromImage(thumbnail);
thumbnailGraph.CompositingQuality = CompositingQuality.HighQuality;
thumbnailGraph.SmoothingMode = SmoothingMode.HighQuality;
thumbnailGraph.InterpolationMode = InterpolationMode.HighQualityBicubic;
@ -41,7 +53,27 @@ namespace MediaBrowser.Api
thumbnail.Dispose();
originalImage.Dispose();
}
private static Graphics GetThumbnailGraphics(Image originalImage, Bitmap thumbnail)
{
thumbnail = new Bitmap(originalImage);
return Graphics.FromImage(thumbnail);
/*try
{
return Graphics.FromImage(thumbnail);
}
catch
{
Bitmap tmp = new Bitmap(thumbnail.Width, thumbnail.Height);
tmp.c
Graphics graphics = Graphics.FromImage(tmp);
graphics.DrawImage(thumbnail, new Rectangle(0, 0, tmp.Width, tmp.Height), 0, 0, tmp.Width, tmp.Height, GraphicsUnit.Pixel);
return graphics;
}*/
}
private static void Write(Image originalImage, Image newImage, Stream toStream, int? quality)
{
// Use special save methods for jpeg and png that will result in a much higher quality image