diff --git a/MediaBrowser.Api/ImageProcessor.cs b/MediaBrowser.Api/ImageProcessor.cs index 32c7e05a2..723ea1bdd 100644 --- a/MediaBrowser.Api/ImageProcessor.cs +++ b/MediaBrowser.Api/ImageProcessor.cs @@ -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