From 5714b59a14d3a70ff998322db3d5083527d51828 Mon Sep 17 00:00:00 2001 From: RKrom Date: Tue, 9 Oct 2012 10:01:37 +0000 Subject: [PATCH] Fixed hard coded Encoder, if sometime the encoder order changes this would have broken the code. Also removed a stream wrapper. git-svn-id: http://svn.code.sf.net/p/greenshot/code/trunk@2130 7dccd23d-a4a3-4e1f-8c07-b4c1b4018ab4 --- GreenshotPlugin/Core/ImageHelper.cs | 8 +++----- GreenshotPlugin/Core/ImageOutput.cs | 17 +++++++++++++---- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/GreenshotPlugin/Core/ImageHelper.cs b/GreenshotPlugin/Core/ImageHelper.cs index 31d5a5ee1..ef7cab2e3 100644 --- a/GreenshotPlugin/Core/ImageHelper.cs +++ b/GreenshotPlugin/Core/ImageHelper.cs @@ -256,11 +256,9 @@ namespace GreenshotPlugin.Core { int iImageSize = BitConverter.ToInt32(srcBuf, SizeICONDIR + SizeICONDIRENTRY * iIndex + 8); int iImageOffset = BitConverter.ToInt32(srcBuf, SizeICONDIR + SizeICONDIRENTRY * iIndex + 12); using (MemoryStream destStream = new MemoryStream()) { - using (BinaryWriter writer = new BinaryWriter(destStream)) { - writer.Write(srcBuf, iImageOffset, iImageSize); - destStream.Seek(0, System.IO.SeekOrigin.Begin); - bmpPngExtracted = new Bitmap(destStream); // This is PNG! :) - } + destStream.Write(srcBuf, iImageOffset, iImageSize); + destStream.Seek(0, System.IO.SeekOrigin.Begin); + bmpPngExtracted = new Bitmap(destStream); // This is PNG! :) } break; } diff --git a/GreenshotPlugin/Core/ImageOutput.cs b/GreenshotPlugin/Core/ImageOutput.cs index 3768cefc7..58d2d9698 100644 --- a/GreenshotPlugin/Core/ImageOutput.cs +++ b/GreenshotPlugin/Core/ImageOutput.cs @@ -157,10 +157,19 @@ namespace GreenshotPlugin.Core { } if (imageFormat == ImageFormat.Jpeg) { - EncoderParameters parameters = new EncoderParameters(1); - parameters.Param[0] = new System.Drawing.Imaging.EncoderParameter(Encoder.Quality, outputSettings.JPGQuality); - ImageCodecInfo[] ies = ImageCodecInfo.GetImageEncoders(); - imageToSave.Save(targetStream, ies[1], parameters); + bool foundEncoder = false; + foreach (ImageCodecInfo imageCodec in ImageCodecInfo.GetImageEncoders()) { + if (imageCodec.FormatID == imageFormat.Guid) { + EncoderParameters parameters = new EncoderParameters(1); + parameters.Param[0] = new EncoderParameter(Encoder.Quality, outputSettings.JPGQuality); + imageToSave.Save(targetStream, imageCodec, parameters); + foundEncoder = true; + break; + } + } + if (!foundEncoder) { + throw new ApplicationException("No JPG encoder found, this should not happen."); + } } else if (imageFormat != ImageFormat.Png && Image.IsAlphaPixelFormat(imageToSave.PixelFormat)) { // No transparency in target format using (Bitmap tmpBitmap = ImageHelper.Clone(imageToSave, PixelFormat.Format24bppRgb)) {