static void SaveImage( ImageHelpers.IWICBitmap bitmap, string filename, ImageFormat format) { if (bitmap == null) { throw new ArgumentNullException(paramName: nameof(bitmap), message: "bitmap cannot be null."); } if (filename == null) { throw new ArgumentNullException(paramName: nameof(filename), message: "filename cannot be null."); } var imagingFactory = ImageHelpers.WIC.CreateImagingFactory(); var stream = imagingFactory.CreateStream(); stream.InitializeFromFilename(wzFileName: filename, dwDesiredAccess: ImageHelpers.GenericAccessRights.GENERIC_WRITE); var encoder = imagingFactory.CreateEncoder(guidContainerFormat: ImageHelpers.GetContainerFormat(format: format), pguidVendor: null); encoder.Initialize(pIStream: stream, cacheOption: ImageHelpers.WICBitmapEncoderCacheOption.WICBitmapEncoderNoCache); ImageHelpers.IWICBitmapFrameEncode ppIFrameEncode = null; var encoderOptions = new ImageHelpers.IPropertyBag2[1]; encoder.CreateNewFrame(ppIFrameEncode: out ppIFrameEncode, encoderOptions: encoderOptions); ppIFrameEncode.Initialize(pIEncoderOptions: encoderOptions[0]); ppIFrameEncode.WriteSource(pIBitmapSource: bitmap, prc: null); ppIFrameEncode.Commit(); encoder.Commit(); Marshal.ReleaseComObject(o: stream); Marshal.ReleaseComObject(o: encoder); Marshal.ReleaseComObject(o: ppIFrameEncode); }
static ImageHelpers.IWICBitmap ClipImage( ImageHelpers.IWICBitmap bitmap, RectangleI rectangle) { var prc = new ImageHelpers.WICRect(); prc.X = rectangle.X; prc.Y = rectangle.Y; prc.Width = rectangle.Width; prc.Height = rectangle.Height; var imagingFactory = ImageHelpers.WIC.CreateImagingFactory(); var bitmapClipper = imagingFactory.CreateBitmapClipper(); bitmapClipper.Initialize(pISource: bitmap, prc: prc); var bitmapFromSource = imagingFactory.CreateBitmapFromSource(pIBitmapSource: bitmapClipper, option: ImageHelpers.WICBitmapCreateCacheOption.WICBitmapNoCache); Marshal.ReleaseComObject(o: bitmapClipper); return(bitmapFromSource); }