public static Bitmap LoadPngFromStream(Stream stream) { // Read input var wicStream = new WICStream(DXGraphicsService.FactoryImaging, stream); var decoder = new PngBitmapDecoder(DXGraphicsService.FactoryImaging); decoder.Initialize(wicStream, DecodeOptions.CacheOnDemand); BitmapFrameDecode bitmapFrameDecode = decoder.GetFrame(0); int width = bitmapFrameDecode.Size.Width; int height = bitmapFrameDecode.Size.Height; //Convert WIC pixel format to D2D1 format var formatConverter = new FormatConverter(DXGraphicsService.FactoryImaging); formatConverter.Initialize(bitmapFrameDecode, PixelFormat.Format32bppBGRA, BitmapDitherType.None, null, 0f, BitmapPaletteType.MedianCut); // Bitmaps and render target settings var wicBitmap = new Bitmap( DXGraphicsService.FactoryImaging, width, height, PixelFormat.Format32bppBGRA, BitmapCreateCacheOption.CacheOnLoad); bitmapFrameDecode.Dispose(); decoder.Dispose(); wicStream.Dispose(); return(wicBitmap); }
private static Bitmap LoadBitmapFromMemory(RenderTarget device, byte[] bytes) { if (device == null) { throw new ArgumentNullException(nameof(device)); } if (bytes == null) { throw new ArgumentNullException(nameof(bytes)); } if (bytes.Length == 0) { throw new ArgumentOutOfRangeException(nameof(bytes)); } Bitmap bmp = null; MemoryStream stream = null; BitmapDecoder decoder = null; BitmapFrameDecode frame = null; FormatConverter converter = null; try { stream = new MemoryStream(bytes); decoder = new BitmapDecoder(ImageFactory, stream, DecodeOptions.CacheOnDemand); bmp = ImageDecoder.Decode(device, decoder); decoder.Dispose(); stream.Dispose(); return(bmp); } catch { if (converter?.IsDisposed == false) { converter.Dispose(); } if (frame?.IsDisposed == false) { frame.Dispose(); } if (decoder?.IsDisposed == false) { decoder.Dispose(); } if (stream != null) { TryCatch(() => stream.Dispose()); } if (bmp?.IsDisposed == false) { bmp.Dispose(); } throw; } }
public static WICBitmap LoadBitmap(string rele_path) { var Imgc = new ImagingFactory(); var Demcoder = new BitmapDecoder(Imgc, rele_path, SharpDX.IO.NativeFileAccess.Read, DecodeOptions.CacheOnLoad); BitmapFrameDecode nm_opb = Demcoder.GetFrame(0); var convert = new FormatConverter(Imgc); convert.Initialize(nm_opb, SharpDX.WIC.PixelFormat.Format32bppPBGRA); var Init_action = new WICBitmap(Imgc, convert, BitmapCreateCacheOption.CacheOnLoad); Imgc.Dispose(); Demcoder.Dispose(); nm_opb.Dispose(); convert.Dispose(); return(Init_action); }
private static D2DBitmap CreateBitmapFromDecoder(RenderTarget renderTarget, ImagingFactory wicFactory, BitmapDecoder decoder) { // Create the initial frame. BitmapFrameDecode source = decoder.GetFrame(0); // Convert the image format to 32bppPBGRA -- which Direct2D expects. FormatConverter converter = wicFactory.CreateFormatConverter(); converter.Initialize( source.ToBitmapSource(), PixelFormats.Pbgra32Bpp, BitmapDitherType.None, BitmapPaletteType.MedianCut ); // Create a Direct2D bitmap from the WIC bitmap. D2DBitmap ret = renderTarget.CreateBitmapFromWicBitmap(converter.ToBitmapSource()); converter.Dispose(); source.Dispose(); return(ret); }
private static Bitmap LoadBitmapFromMemory(RenderTarget device, byte[] bytes) { if (device == null) { throw new ArgumentNullException(nameof(device)); } if (bytes == null) { throw new ArgumentNullException(nameof(bytes)); } if (bytes.Length == 0) { throw new ArgumentOutOfRangeException(nameof(bytes)); } Bitmap bmp = null; MemoryStream stream = null; BitmapDecoder decoder = null; BitmapFrameDecode frame = null; FormatConverter converter = null; try { stream = new MemoryStream(bytes); decoder = new BitmapDecoder(ImageFactory, stream, DecodeOptions.CacheOnDemand); var pixelFormat = ImagePixelFormats.GetBestPixelFormat(decoder.DecoderInfo?.PixelFormats); frame = decoder.GetFrame(0); converter = new FormatConverter(ImageFactory); try { converter.Initialize(frame, pixelFormat); bmp = Bitmap.FromWicBitmap(device, converter); } catch { TryCatch(() => converter.Dispose()); converter = new FormatConverter(ImageFactory); converter.Initialize(frame, PixelFormat.Format32bppRGB); bmp = Bitmap.FromWicBitmap(device, converter); } converter.Dispose(); frame.Dispose(); decoder.Dispose(); stream.Dispose(); return(bmp); } catch { if (converter?.IsDisposed == false) { converter.Dispose(); } if (frame?.IsDisposed == false) { frame.Dispose(); } if (decoder?.IsDisposed == false) { decoder.Dispose(); } if (stream != null) { TryCatch(() => stream.Dispose()); } if (bmp?.IsDisposed == false) { bmp.Dispose(); } throw; } }