public void Save(string filename, ImageCodecInfo encoder, EncoderParameters?encoderParams) { if (filename == null) { throw new ArgumentNullException(nameof(filename)); } ThrowIfDirectoryDoesntExist(filename); int st; Guid guid = encoder.Clsid; if (encoderParams == null) { st = Gdip.GdipSaveImageToFile(nativeImage, filename, ref guid, IntPtr.Zero); } else { IntPtr nativeEncoderParams = encoderParams.ConvertToMemory(); st = Gdip.GdipSaveImageToFile(nativeImage, filename, ref guid, nativeEncoderParams); Marshal.FreeHGlobal(nativeEncoderParams); } Gdip.CheckStatus(st); }
public void Save(Stream stream, ImageCodecInfo encoder, EncoderParameters?encoderParams) { int st; IntPtr nativeEncoderParams; Guid guid = encoder.Clsid; if (encoderParams == null) { nativeEncoderParams = IntPtr.Zero; } else { nativeEncoderParams = encoderParams.ConvertToMemory(); } try { GdiPlusStreamHelper sh = new GdiPlusStreamHelper(stream, seekToOrigin: false, makeSeekable: false); st = Gdip.GdipSaveImageToDelegate_linux(nativeImage, sh.GetBytesDelegate, sh.PutBytesDelegate, sh.SeekDelegate, sh.CloseDelegate, sh.SizeDelegate, ref guid, nativeEncoderParams); // Since we're just passing to native code the delegates inside the wrapper, we need to keep sh alive // to avoid the object being collected and therefore the delegates would be collected as well. GC.KeepAlive(sh); } finally { if (nativeEncoderParams != IntPtr.Zero) { Marshal.FreeHGlobal(nativeEncoderParams); } } Gdip.CheckStatus(st); }
/// <summary> /// Adds an <see cref='EncoderParameters'/> to the specified <see cref='Image'/>. /// </summary> public void SaveAdd(Image image, EncoderParameters?encoderParams) { IntPtr encoder = IntPtr.Zero; if (image == null) { throw new ArgumentNullException(nameof(image)); } if (encoderParams != null) { encoder = encoderParams.ConvertToMemory(); } _rawData = null; try { Gdip.CheckStatus(Gdip.GdipSaveAddImage( new HandleRef(this, nativeImage), new HandleRef(image, image.nativeImage), new HandleRef(encoderParams, encoder))); } finally { if (encoder != IntPtr.Zero) { Marshal.FreeHGlobal(encoder); } } }
/// <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(string filename, ImageCodecInfo encoder, EncoderParameters?encoderParams) { int st; Guid guid = encoder.Clsid; if (encoderParams == null) { st = Gdip.GdipSaveImageToFile(nativeImage, filename, ref guid, IntPtr.Zero); } else { IntPtr nativeEncoderParams = encoderParams.ConvertToMemory(); st = Gdip.GdipSaveImageToFile(nativeImage, filename, ref guid, nativeEncoderParams); Marshal.FreeHGlobal(nativeEncoderParams); } Gdip.CheckStatus(st); }
/// <summary> /// Adds an <see cref='EncoderParameters'/> to this <see cref='Image'/>. /// </summary> public void SaveAdd(EncoderParameters?encoderParams) { IntPtr encoder = IntPtr.Zero; if (encoderParams != null) { encoder = encoderParams.ConvertToMemory(); } _rawData = null; try { Gdip.CheckStatus(Gdip.GdipSaveAdd(new HandleRef(this, nativeImage), new HandleRef(encoderParams, encoder))); } finally { if (encoder != IntPtr.Zero) { Marshal.FreeHGlobal(encoder); } } }