[WPF]OpenCvSharpを使ってRenderTargetBitmapをプレビューする
以前に、OpenCvSharp 4.5.2.20210404 を使って、Viewの外観をBitmap化する時などによく使うRenderTargetBitmapクラスのオブジェクトをプレビューするコードを考えましたので、Qiitaで共有したいと思います。
コード
コードは以下の通りです。
static class OpenCvSharpHelper
{
[Conditional("DEBUG")]
public static void ImShow(string windowTitle, RenderTargetBitmap rtb)
{
FormatConvertedBitmap newFormatedBitmapSource = new FormatConvertedBitmap();
newFormatedBitmapSource.BeginInit();
newFormatedBitmapSource.Source = rtb;
newFormatedBitmapSource.DestinationFormat = PixelFormats.Bgr24;
newFormatedBitmapSource.EndInit();
var mat = OpenCvSharp.WpfExtensions.BitmapSourceConverter.ToMat(newFormatedBitmapSource);
OpenCvSharp.Cv2.ImShow(windowTitle, mat);
}
}
工夫した点
RenderTargetBitmapはPixelFormats.Pbgra32しかサポートしていないので、OpenCvSharp.ImShow()のMatパラメータの要件であるBGR24で初期化できません。なので、RenderTargetBitmapはPbgra32で作って、その後、FormatConvertedBitmapによりBgr24に変換したビットマップをOpenCvSharp.Matに変換してImShow()しています。
Pbgra32(RenderTargetBitmap)→Bgr24(FormatConvertedBitmap)→Bgr24(Mat)
[Conditional("DEBUG")]は付けなくてもいいです。まあ、あまりRenderTargetBitmapをプレビューする機能をリリースビルドに含めることは少ないと思いますが、これは個人または組織の自由です。
私はこのコードを主にデバッグする時によく使います。
用例
Visualオブジェクトとwidthとheightがあればビットマップ化してウィンドウに表示できます。
private void Render(Visual target, double width, double height)
{
var rtb = new RenderTargetBitmap((int)width, (int)height, 96, 96, PixelFormats.Pbgra32); //Pbgra32である必要がある!!!
DrawingVisual visual = new DrawingVisual();
using (DrawingContext context = visual.RenderOpen())
{
//ビットマップにFrameworkElementの外観をまるごと描写する例
VisualBrush brush = new VisualBrush(target);
context.DrawRectangle(brush, null, new Rect(new Point(), new Size(width, height)));
}
rtb.Render(visual);
//testウィンドウにRenderTargetBitmapを表示する
OpenCvSharpHelper.ImShow("test", rtb);
}
ネタ元
このコードのネタ元はベクターグラフィックスドローイングツール "boiler's Graphics"です。
https://github.com/dhq-boiler/boiler-s-Graphics.git
Author And Source
この問題について([WPF]OpenCvSharpを使ってRenderTargetBitmapをプレビューする), 我々は、より多くの情報をここで見つけました https://qiita.com/dhq_boiler/items/64f790af59d61faee837著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .