[2020.07.25] 応急処置:OpenCVShaerp 4.4.0.20200725 で、MatからToWriteableBitmapメソッドが消えたので修正

c#
■ 元から引っ張ってくればいいと言われました(^◇^;

opencvsharp/src/OpenCvSharp.WpfExtensions/BitmapSourceConverter.cs
「namespace OpenCvSharp.WpfExtensions」の 中身をみなされと。

※ソースをコピペしようと思ったんですが、躓いたおかげで0.7.0の修正の方が処理速度が上のような感じがするのでこのまま行こうかと思います。
多分。きっとヘ(゚∀゚ヘ)アヒャ

using OpenCvSharp.WpfExtensions;を引っ張ってくるには眠すぎる…
宿題にしても忘れるので、次の問題が出るまで放置ですm(__)m

MatデータをWpfで表示するときのなんちゃらです。

おぅいえぇ。この修正がただしとは限りません(^◇^;
ソースが短そうな方から試してみた。
まぁ動いたってことで。

メモリリークとかとりあえず置いといて…(笑)
えぇっ(?_?)エ?

最初からToWriteableBitmapを使ってない人にはなんじゃそりゃって事だろうなぁ(;^_^A アセアセ・・・

■ ToWriteableBitmapメソッド

おまじない。

        [System.Runtime.InteropServices.DllImport("gdi32.dll")]
        public static extern bool DeleteObject(System.IntPtr hObject);

ソースの途中からの貼り付けで申し訳ないです。thumbImageはMatです。

            {
                // 文字を描画
                // 影
                int tTop = 16;
                int tLeft = 4;

                MatWriteString(thumbImage, tLeft, tTop, "Read Error");
            }

            // ここから------------------------------------------------------------------------------------
            // TrimTop.Source = thumbImage.ToWriteableBitmap();
            
            // HBitmapに変換
            var hBitmap = (thumbImage.ToBitmap()).GetHbitmap();
            // HBitmapからBitmapSourceを作成
            try
            {
                TrimTop.Source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                    hBitmap,
                    System.IntPtr.Zero,
                    System.Windows.Int32Rect.Empty,
                    System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions()
                );
            }
            finally
            {
                DeleteObject(hBitmap);
            }
            // ここまで------------------------------------------------------------------------------------

            thumbImage.Dispose();

「HBitmapに変換」のところががっつり無駄っすなぁ(笑)
ブラックボックスのまま作業薦めてるんで、高速化とか、メモリリークとか考えてません。
Matで使えるメソッドを全部知らないだけとも言いますが(・・ゞポリポリ
MatからHBitmap作れば、Bitmap変換一つ減るのでこの辺りの処理が倍早くなる悪寒・・・

■ TSのフレームを読み込んで、枠付けて文字入れてImage.Sourceに入れる感じ

初めてのWPFとか言い訳を並べつつ、、
1年前とは言えソースを見ると心に刺さる汚さ(笑)

ちょいちょいいじりながらテストコードを起こしてペタペタたと。

変換変換であまり考えずにフィーリングとノリで…
要は理解してない(=メモリがリークしてそうだ)(^◇^;

もう一つのToStreamもこれから試してみるっす。

■ ToMemoryStreamからのImage.Sourceの作成

実装がへぼいせいもあるのですが、連続更新するとフレームレートが半分くらいになりましたので・・・m(__)m
上記のままの実装となります。(TrimViewer0.7.0)


最近プログラム組んでないんで全体が見えてません。
もともと小さい記憶領域がさらに縮小しているので短期記憶が全く役に立たない状態です。
老化とアルコールとギャンブルと女な怖い・・・筋腫もうすぐ8か月にゃ~

Mat…Mattが浮かぶんですもの( ^ω^)・・・
グレーなお金の記憶な桑田の派手な息子が!助けて~
m(__)m

参考サイト

C#における「ビットマップ形式の画像データを相互変換」まとめ - Qiita
概要 「ビットマップ形式」……いわゆるラスターグラフィックスは、最も典型的な画像の表現方法でしょう。 それをプログラム上で表現するため、C#では System.Drawing.Bitmap など…