前提・実現したいこと
OpenCVSharpでMatの形式をした画像データがあり、それをWPF上のSharpGLコントロールに描画したいです。
発生している問題・エラーメッセージ
エラーはなく起動するが、画像は描画されず真っ白な状態になります。
該当のソースコード
csharp
1using OpenCvSharp; 2using SharpGL; 3 4using System.Windows.Controls; 5using System.Windows.Input; 6 7 8namespace [プロジェクト名] 9{ 10 11 public partial class [クラス名] 12 { 13 uint[] texId = new uint[1]; 14 15 public Edit() 16 { 17 InitializeComponent(); 18 } 19 20 private void OpenGLControl_OpenGLInitialized(object sender, SharpGL.WPF.OpenGLRoutedEventArgs args) 21 { 22 OpenGL gl = args.OpenGL; 23 Mat mat = //ここにMatを取得する処理が書かれています。 24 gl.Enable(OpenGL.GL_TEXTURE_2D); 25 26 gl.GenTextures(1, texId); 27 gl.BindTexture(OpenGL.GL_TEXTURE_2D, texId[0]); 28 29 gl.TexImage2D(OpenGL.GL_TEXTURE_2D, 0, (int)OpenGL.GL_RGB, mat.Size().Width, mat.Size().Height, 0, 30 OpenGL.GL_BGR_EXT, OpenGL.GL_UNSIGNED_BYTE, mat.Data); 31 32 33 } 34 35 private void OpenGLControl_OpenGLDraw(object sender, SharpGL.WPF.OpenGLRoutedEventArgs args) 36 { 37 OpenGL gl = args.OpenGL; 38 gl.LoadIdentity(); 39 gl.Enable(OpenGL.GL_TEXTURE_2D); 40 gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); 41 42 gl.BindTexture(OpenGL.GL_TEXTURE_2D, texId[0]); 43 44 gl.Begin(OpenGL.GL_QUADS); 45 gl.TexCoord(0, 0); gl.Vertex(-1, -1); 46 gl.TexCoord(0, 1); gl.Vertex(-1, 1); 47 gl.TexCoord(1, 1); gl.Vertex(1, 1); 48 gl.TexCoord(1, 0); gl.Vertex(1, -1); 49 gl.End(); 50 51 gl.Disable(OpenGL.GL_TEXTURE_2D); 52 gl.Flush(); 53 } 54 } 55} 56
XAML
1// コード冒頭にxmlns:sharpGL="clr-namespace:SharpGL.WPF;assembly=SharpGL.WPF" と記載されています。 2 3<sharpGL:OpenGLControl OpenGLInitialized="OpenGLControl_OpenGLInitialized" 4OpenGLDraw="OpenGLControl_OpenGLDraw" Width="960" Height="540"></sharpGL:OpenGLControl>
試したこと
Matデータそのものに問題があることを疑い、OpenCVの方の機能を使い
csharp
1Mat mat = //ここにMatを取得する処理が書かれています。 2Cv2.ImShow("画像表示ウィンドウ", mat);
と追加し表示させてみたところ、正常に表示されました。
補足情報(FW/ツールのバージョンなど)
SharpGL.WPF (3.1.1)
OpenCVSharp (2.4.0.1) ※ともにNuGetで取得
回答いただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。