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; } }
private static BitmapSource LoadBitmap(string filename) { Imgfactory = new ImagingFactory(); var d = new BitmapDecoder( Imgfactory, filename, DecodeOptions.CacheOnDemand ); // var frame = d.GetFrame(0); var fconv = new FormatConverter(Imgfactory); fconv.Initialize(frame, PixelFormat.Format32bppPRGBA, BitmapDitherType.None, null, 0.0, BitmapPaletteType.Custom); d.Dispose(); frame.Dispose(); //fconv.Dispose(); Imgfactory.Dispose(); //MessageBox.Show("Pause"); return(fconv); //return null; }
internal static D2DBitmap LoadBitmapFromStream( RenderTarget renderTarget, ImagingFactory wicFactory, Stream ioStream) { BitmapDecoder decoder = wicFactory.CreateDecoderFromStream(ioStream, DecodeMetadataCacheOption.OnLoad); D2DBitmap ret = CreateBitmapFromDecoder(renderTarget, wicFactory, decoder); decoder.Dispose(); return(ret); }
internal static D2DBitmap LoadBitmapFromFile( RenderTarget renderTarget, ImagingFactory wicFactory, string fileName) { BitmapDecoder decoder = wicFactory.CreateDecoderFromFileName(fileName, DesiredAccess.Read, DecodeMetadataCacheOption.OnLoad); D2DBitmap ret = CreateBitmapFromDecoder(renderTarget, wicFactory, decoder); decoder.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)); } try { Bitmap bmp = null; var stream = new MemoryStream(bytes); var decoder = new BitmapDecoder(ImageFactory, stream, DecodeOptions.CacheOnDemand); var frame = decoder.GetFrame(0); var converter = new FormatConverter(ImageFactory); try { converter.Initialize(frame, PixelFormat.Format32bppPRGBA); 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 { throw; } }
void HandleResponse(WebResponse response) { lock (this) { _image = null; using (var memStream = new MemoryStream()) using (Stream streamResponse = response.GetResponseStream()) { try { if (streamResponse != null) { streamResponse.CopyTo(memStream); Log.Debug($"Finished loading URL {_url}", SymbolChildId); ImagingFactory factory = new ImagingFactory(); memStream.Position = 0; var bitmapDecoder = new BitmapDecoder(factory, memStream, DecodeOptions.CacheOnDemand); var formatConverter = new FormatConverter(factory); var bitmapFrameDecode = bitmapDecoder.GetFrame(0); formatConverter.Initialize(bitmapFrameDecode, SharpDX.WIC.PixelFormat.Format32bppPRGBA, BitmapDitherType.None, null, 0.0, BitmapPaletteType.Custom); _image?.Dispose(); _image = ResourceManager.CreateTexture2DFromBitmap(ResourceManager.Instance().Device, formatConverter); _image.DebugName = _url; bitmapFrameDecode.Dispose(); bitmapDecoder.Dispose(); formatConverter.Dispose(); factory.Dispose(); Texture.DirtyFlag.Invalidate(); } } catch (Exception e) { Log.Info($"Failed to load URL : {e.Message}"); } response.Close(); } } }
private void LoadBitmap(RenderTarget device, byte[] bytes) { if (device == null) { throw new ArgumentNullException(nameof(device)); } if (bytes == null) { throw new ArgumentNullException(nameof(bytes)); } try { var stream = new MemoryStream(bytes); var decoder = new BitmapDecoder(ImagingFactory, stream, DecodeOptions.CacheOnDemand); var frame = decoder.GetFrame(0); var converter = new FormatConverter(ImagingFactory); try { converter.Initialize(frame, PixelFormat.Format32bppPRGBA); SharpDxBitmap = Bitmap.FromWicBitmap(device, converter); } catch { // falling back to RGB if unsupported converter = new FormatConverter(ImagingFactory); converter.Initialize(frame, PixelFormat.Format32bppRGB); SharpDxBitmap = Bitmap.FromWicBitmap(device, converter); } converter.Dispose(); frame.Dispose(); decoder.Dispose(); stream.Dispose(); } catch (Exception ex) { throw new FormatException("Invalid or unsupported image format!", ex); } }
public override void Dispose() { WicImpl.Dispose(); _decoder?.Dispose(); }
//------------------------------------------------------------------------------------- // Load a WIC-supported file in memory //------------------------------------------------------------------------------------- internal static Image LoadFromWICMemory(IntPtr pSource, int size, bool makeACopy, GCHandle?handle) { var flags = WICFlags.AllFrames; Image image = null; // Create input stream for memory using (var stream = new WICStream(Factory, new DataPointer(pSource, size))) { // If the decoder is unable to decode the image, than return null BitmapDecoder decoder = null; try { decoder = new BitmapDecoder(Factory, stream, DecodeOptions.CacheOnDemand); using (var frame = decoder.GetFrame(0)) { // Get metadata Guid convertGuid; var tempDesc = DecodeMetadata(flags, decoder, frame, out convertGuid); // If not supported. if (!tempDesc.HasValue) { return(null); } var mdata = tempDesc.Value; if ((mdata.ArraySize > 1) && (flags & WICFlags.AllFrames) != 0) { return(DecodeMultiframe(flags, mdata, decoder)); } image = DecodeSingleFrame(flags, mdata, convertGuid, frame); } } catch { image = null; } finally { if (decoder != null) { decoder.Dispose(); } } } // For WIC, we are not keeping the original buffer. if (image != null && !makeACopy) { if (handle.HasValue) { handle.Value.Free(); } else { Utilities.FreeMemory(pSource); } } return(image); }
protected void Bitmapを生成する(VariablePath 画像ファイルパス, BitmapProperties1?bitmapProperties1 = null) { var decoder = (BitmapDecoder)null !; var sourceFrame = (BitmapFrameDecode)null !; var converter = (FormatConverter)null !; try { // 以下、生成に失敗しても例外は発生しない。ただ描画メソッドで表示されなくなるだけ。 #region " 事前チェック。" //----------------- if (string.IsNullOrEmpty(画像ファイルパス.数なしパス)) { Log.ERROR($"画像ファイルパスが null または空文字列です。[{画像ファイルパス.変数付きパス}]"); return; } if (!File.Exists(画像ファイルパス.数なしパス)) { Log.ERROR($"画像ファイルが存在しません。[{画像ファイルパス.変数付きパス}]"); return; } //----------------- #endregion #region " 画像ファイルに対応できるデコーダを見つける。" //----------------- try { decoder = new BitmapDecoder( Global.WicImagingFactory2, 画像ファイルパス.数なしパス, NativeFileAccess.Read, DecodeOptions.CacheOnLoad); } catch (SharpDXException e) { Log.ERROR($"画像ファイルに対応するコーデックが見つかりません。(0x{e.HResult:x8})[{画像ファイルパス.変数付きパス}]"); return; } //----------------- #endregion #region " 最初のフレームをデコードし、取得する。" //----------------- try { sourceFrame = decoder.GetFrame(0); } catch (SharpDXException e) { Log.ERROR($"画像ファイルの最初のフレームのデコードに失敗しました。(0x{e.HResult:x8})[{画像ファイルパス.変数付きパス}]"); return; } //----------------- #endregion #region " 32bitPBGRA へのフォーマットコンバータを生成する。" //----------------- try { // WICイメージングファクトリから新しいコンバータを生成。 converter = new FormatConverter(Global.WicImagingFactory2); // コンバータに変換元フレームや変換後フォーマットなどを設定。 converter.Initialize( sourceRef: sourceFrame, dstFormat: SharpDX.WIC.PixelFormat.Format32bppPBGRA, // Premultiplied BGRA dither: BitmapDitherType.None, paletteRef: null, alphaThresholdPercent: 0.0, paletteTranslate: BitmapPaletteType.MedianCut); } catch (SharpDXException e) { Log.ERROR($"32bitPBGRA へのフォーマットコンバータの生成または初期化に失敗しました。(0x{e.HResult:x8})[{画像ファイルパス.変数付きパス}]"); return; } //----------------- #endregion #region " コンバータを使って、フレームを WICビットマップ経由で D2D ビットマップに変換する。" //----------------- try { // WIC ビットマップを D2D ビットマップに変換する。 this.Bitmap?.Dispose(); this.Bitmap = bitmapProperties1 switch { null => Bitmap1.FromWicBitmap(Global.既定のD2D1DeviceContext, converter), _ => Bitmap1.FromWicBitmap(Global.既定のD2D1DeviceContext, converter, bitmapProperties1), }; } catch (SharpDXException e) { Log.ERROR($"Direct2D1.Bitmap1 への変換に失敗しました。(0x{e.HResult:x8})[{画像ファイルパス.変数付きパス}]"); return; } //----------------- #endregion this.サイズ = new Size2F(this.Bitmap.PixelSize.Width, this.Bitmap.PixelSize.Height); } finally { converter?.Dispose(); sourceFrame?.Dispose(); decoder?.Dispose(); } }
protected void _Bitmapを生成する(BitmapProperties1 bitmapProperties1 = null) { var decoder = (BitmapDecoder)null; var sourceFrame = (BitmapFrameDecode)null; var converter = (FormatConverter)null; try { // 生成に失敗しても例外は発生しない。ただ描画メソッドで表示されなくなるだけ。 #region " 画像ファイルパスの有効性を確認する。" //----------------- if (this._画像ファイルパス.数なしパス.Nullまたは空である()) { Log.ERROR($"画像ファイルパスが null または空文字列です。[{this._画像ファイルパス.変数付きパス}]"); return; } if (false == System.IO.File.Exists(this._画像ファイルパス.数なしパス)) { Log.ERROR($"画像ファイルが存在しません。[{this._画像ファイルパス.変数付きパス}]"); return; } //----------------- #endregion #region " 画像ファイルに対応できるデコーダを見つける。" //----------------- try { decoder = new BitmapDecoder( グラフィックデバイス.Instance.WicImagingFactory, this._画像ファイルパス.数なしパス, SharpDX.IO.NativeFileAccess.Read, DecodeOptions.CacheOnLoad); } catch (SharpDXException e) { Log.ERROR($"画像ファイルに対応するコーデックが見つかりません。(0x{e.HResult:x8})[{this._画像ファイルパス.変数付きパス}]"); return; } //----------------- #endregion #region " 最初のフレームをデコードし、取得する。" //----------------- try { sourceFrame = decoder.GetFrame(0); } catch (SharpDXException e) { Log.ERROR($"画像ファイルの最初のフレームのデコードに失敗しました。(0x{e.HResult:x8})[{this._画像ファイルパス.変数付きパス}]"); return; } //----------------- #endregion #region " 32bitPBGRA へのフォーマットコンバータを生成する。" //----------------- try { // WICイメージングファクトリから新しいコンバータを生成。 converter = new FormatConverter(グラフィックデバイス.Instance.WicImagingFactory); // コンバータに変換元フレームや変換後フォーマットなどを設定。 converter.Initialize( sourceRef: sourceFrame, dstFormat: SharpDX.WIC.PixelFormat.Format32bppPBGRA, // Premultiplied BGRA dither: BitmapDitherType.None, paletteRef: null, alphaThresholdPercent: 0.0, paletteTranslate: BitmapPaletteType.MedianCut); } catch (SharpDXException e) { Log.ERROR($"32bitPBGRA へのフォーマットコンバータの生成または初期化に失敗しました。(0x{e.HResult:x8})[{this._画像ファイルパス.変数付きパス}]"); return; } //----------------- #endregion #region " コンバータを使って、フレームを WICビットマップ経由で D2D ビットマップに変換する。" //----------------- try { // WIC ビットマップを D2D ビットマップに変換する。 this._Bitmap?.Dispose(); this._Bitmap = Bitmap1.FromWicBitmap( グラフィックデバイス.Instance.D2DDeviceContext, converter, bitmapProperties1); } catch (SharpDXException e) { Log.ERROR($"Direct2D1.Bitmap1 への変換に失敗しました。(0x{e.HResult:x8})[{this._画像ファイルパス.変数付きパス}]"); return; } //----------------- #endregion //Log.Info( $"{FDKUtilities.現在のメソッド名}: 画像を生成しました。[{変数付きファイルパス}]" ); } finally { converter?.Dispose(); sourceFrame?.Dispose(); decoder?.Dispose(); } }
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; } }