/// <summary> /// Saves this <see cref='Image'/> to the specified file in the specified format and with the specified encoder parameters. /// </summary> public void Save(string filename, ImageCodecInfo encoder, EncoderParameters?encoderParams) { if (filename == null) { throw new ArgumentNullException(nameof(filename)); } if (encoder == null) { throw new ArgumentNullException(nameof(encoder)); } ThrowIfDirectoryDoesntExist(filename); IntPtr encoderParamsMemory = IntPtr.Zero; if (encoderParams != null) { _rawData = null; encoderParamsMemory = encoderParams.ConvertToMemory(); } try { Guid g = encoder.Clsid; bool saved = false; if (_rawData != null) { ImageCodecInfo?rawEncoder = RawFormat.FindEncoder(); if (rawEncoder != null && rawEncoder.Clsid == g) { using (FileStream fs = File.OpenWrite(filename)) { fs.Write(_rawData, 0, _rawData.Length); saved = true; } } } if (!saved) { Gdip.CheckStatus(Gdip.GdipSaveImageToFile( new HandleRef(this, nativeImage), filename, ref g, new HandleRef(encoderParams, encoderParamsMemory))); } } finally { if (encoderParamsMemory != IntPtr.Zero) { Marshal.FreeHGlobal(encoderParamsMemory); } } }
/// <summary> /// Saves this <see cref='Image'/> to the specified stream in the specified format. /// </summary> public void Save(Stream stream, ImageCodecInfo encoder, EncoderParameters?encoderParams) { if (stream == null) { throw new ArgumentNullException(nameof(stream)); } if (encoder == null) { throw new ArgumentNullException(nameof(encoder)); } IntPtr encoderParamsMemory = IntPtr.Zero; if (encoderParams != null) { _rawData = null; encoderParamsMemory = encoderParams.ConvertToMemory(); } try { Guid g = encoder.Clsid; bool saved = false; if (_rawData != null) { ImageCodecInfo?rawEncoder = RawFormat.FindEncoder(); if (rawEncoder != null && rawEncoder.Clsid == g) { stream.Write(_rawData, 0, _rawData.Length); saved = true; } } if (!saved) { using DrawingCom.IStreamWrapper streamWrapper = DrawingCom.GetComWrapper(new GPStream(stream, makeSeekable: false)); unsafe { Gdip.CheckStatus(Gdip.GdipSaveImageToStream( new HandleRef(this, nativeImage), streamWrapper.Ptr, &g, new HandleRef(encoderParams, encoderParamsMemory))); } } } finally { if (encoderParamsMemory != IntPtr.Zero) { Marshal.FreeHGlobal(encoderParamsMemory); } } }
public void Save(Stream stream, ImageFormat format) { ImageCodecInfo?encoder = FindEncoderForFormat(format); if (encoder == null) { throw new ArgumentException(SR.Format(SR.NoCodecAvailableForFormat, format.Guid)); } Save(stream, encoder, null); }
public static void CreateSmallCopy(FileInfo sourceImageFile, FileInfo targetImageFile) { using (Image sourceImage = Image.FromFile(sourceImageFile.FullName)) { // Determine how to resize -- we want the longest side to be IMAGE_SIZE Single scaleFactor = 1; if (sourceImage.Width >= sourceImage.Height) { // Landscape if (sourceImage.Width > IMAGE_SIZE) { // E.g., if longer edge is 2048, the scaleFactor is 0.5 scaleFactor = IMAGE_SIZE / ( Single )sourceImage.Width; } } else { // Portrait if (sourceImage.Height > IMAGE_SIZE) { scaleFactor = IMAGE_SIZE / ( Single )sourceImage.Height; } } Int32 newWidth = ( Int32 )(sourceImage.Width * scaleFactor + 1); Int32 newHeight = ( Int32 )(sourceImage.Height * scaleFactor + 1); // Create an Encoder object based on the GUID // for the Quality parameter category. // https://docs.microsoft.com/en-us/dotnet/framework/winforms/advanced/how-to-set-jpeg-compression-level?redirectedfrom=MSDN ImageCodecInfo? jgpEncoder = GetEncoder(ImageFormat.Jpeg); Encoder myEncoder = Encoder.Quality; EncoderParameters myEncoderParameters = new EncoderParameters(1); EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, QUALITY); myEncoderParameters.Param[0] = myEncoderParameter; using (Bitmap bitmap = new Bitmap(newWidth, newHeight)) using (var graphics = Graphics.FromImage(bitmap)) { graphics.SmoothingMode = SmoothingMode.AntiAlias; graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; graphics.CompositingQuality = CompositingQuality.HighQuality; graphics.DrawImage(sourceImage, new Rectangle(0, 0, newWidth, newHeight)); bitmap.Save(targetImageFile.FullName, jgpEncoder, myEncoderParameters); } File.SetLastWriteTime(targetImageFile.FullName, sourceImageFile.LastWriteTime); } }
public void Save(string filename, ImageFormat format) { ImageCodecInfo?encoder = FindEncoderForFormat(format); if (encoder == null) { // second chance encoder = FindEncoderForFormat(RawFormat); if (encoder == null) { string msg = string.Format("No codec available for saving format '{0}'.", format.Guid); throw new ArgumentException(msg, nameof(format)); } } Save(filename, encoder, null); }
/// <summary> /// Saves this <see cref='Image'/> to the specified file in the specified format. /// </summary> public void Save(string filename, ImageFormat format) { if (format == null) { throw new ArgumentNullException(nameof(format)); } ImageCodecInfo?codec = format.FindEncoder(); if (codec == null) { codec = ImageFormat.Png.FindEncoder() !; } Save(filename, codec, null); }
private static ImageCodecInfo?GetEncoder(ImageFormat format) { ImageCodecInfo?ret = null; ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders(); foreach (ImageCodecInfo codec in codecs) { if (codec.FormatID == format.Guid) { ret = codec; } } return(ret); }
internal ImageCodecInfo?FindEncoderForFormat(ImageFormat format) { ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders(); ImageCodecInfo? encoder = null; if (format.Guid.Equals(ImageFormat.MemoryBmp.Guid)) { format = ImageFormat.Png; } /* Look for the right encoder for our format*/ for (int i = 0; i < encoders.Length; i++) { if (encoders[i].FormatID.Equals(format.Guid)) { encoder = encoders[i]; break; } } return(encoder); }
public static bool ConvertPdfToTiff(string sourceFile, string outputFile, float dpi, RenderType type, bool rotateLandscapePages, bool shrinkToLetter, int maxSizeInPdfPixels, string pdfPassword) { bool output = false; if (string.IsNullOrEmpty(sourceFile) || string.IsNullOrEmpty(outputFile)) { throw new ArgumentNullException(); } using (MuPDF pdfDoc = new MuPDF(sourceFile, pdfPassword)) { using (FileStream outputStream = new FileStream(outputFile, FileMode.Create, FileAccess.ReadWrite, FileShare.None)) { ImageCodecInfo?info = null; foreach (ImageCodecInfo ice in ImageCodecInfo.GetImageEncoders()) { if (ice.MimeType == "image/tiff") { info = ice; } } Bitmap saveTif = null; pdfDoc.AntiAlias = false; for (int i = 1; i <= pdfDoc.PageCount; i++) { pdfDoc.Page = i; Bitmap FirstImage = pdfDoc.GetBitmap(0, 0, dpi, dpi, 0, type, rotateLandscapePages, shrinkToLetter, maxSizeInPdfPixels); if (FirstImage == null) { throw new Exception("Unable to convert pdf to tiff!"); } using (EncoderParameters ep = new EncoderParameters(2)) { ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.MultiFrame); ep.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionLZW); if (type == RenderType.Monochrome) { ep.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.Compression, (long)EncoderValue.CompressionCCITT4); } if (i == 1) { saveTif = FirstImage; saveTif.Save(outputStream, info, ep); } else { ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.FrameDimensionPage); saveTif.SaveAdd(FirstImage, ep); FirstImage.Dispose(); } if (i == pdfDoc.PageCount) { ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.SaveFlag, (long)EncoderValue.Flush); saveTif.SaveAdd(ep); saveTif.Dispose(); } } } } if (File.Exists(outputFile)) { output = true; } } return(output); }