Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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;
            }
        }
Ejemplo n.º 6
0
        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();
                    }
            }
        }
Ejemplo n.º 7
0
        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);
            }
        }
Ejemplo n.º 8
0
 public override void Dispose()
 {
     WicImpl.Dispose();
     _decoder?.Dispose();
 }
Ejemplo n.º 9
0
        //-------------------------------------------------------------------------------------
        // 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);
        }
Ejemplo n.º 10
0
        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();
            }
        }
Ejemplo n.º 11
0
        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();
            }
        }
Ejemplo n.º 12
0
        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;
            }
        }