1

このコードを使用して、Kinectコードで使用する画像ピクセルにアクセスしたいので、深度ビット画像ビットに置き換えることができるので、WPFアプリケーションを作成し、コードを実行するとすぐにこれを取得します例外(コンソールアプリケーションでは発生しません)が、WPFアプリケーションとして実行するにはこれが必要です。。Kinectで使うつもりです

XamlParseException

'指定されたバインディング制約に一致するタイプ'pixelManipulation.MainWindow'でのコンストラクターの呼び出しは、例外をスローしました。行番号「3」および行位置「9」。

コードは次のとおりです。

public partial class MainWindow : Window
    {

           System.Drawing.Bitmap b = new
                System.Drawing.Bitmap(@"autumn_scene.jpg");


        public MainWindow()
        {
            InitializeComponent();

            doSomethingWithBitmapFast(b);

        }

        public static void doSomethingWithBitmapFast(System.Drawing.Bitmap bmp)
        {
            Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);

            System.Drawing.Imaging.BitmapData bmpData =
                bmp.LockBits(rect,
                    System.Drawing.Imaging.ImageLockMode.ReadOnly,
                    bmp.PixelFormat);

            IntPtr ptr = bmpData.Scan0;

            int bytes = bmpData.Stride * bmp.Height;
            byte[] rgbValues = new byte[bytes];

            System.Runtime.InteropServices.Marshal.Copy(ptr,
                           rgbValues, 0, bytes);

            byte red = 0;
            byte green = 0;
            byte blue = 0;

            for (int x = 0; x < bmp.Width; x++)
            {
                for (int y = 0; y < bmp.Height; y++)
                {
                    //See the link above for an explanation 
                    //of this calculation (assumes 24bppRgb format)
                    int position = (y * bmpData.Stride) + (x * 3);
                    blue = rgbValues[position];
                    green = rgbValues[position + 1];
                    red = rgbValues[position + 2];
                    Console.WriteLine("Fast: " + red + " "
                                       + green + " " + blue);
                }
            }
            bmp.UnlockBits(bmpData);
        }
    }
}
4

1 に答える 1

1

問題は、コードではなく xaml ファイルにあります。例外として、xaml parse exceptionが示されています。私の推測では、もはや存在しないものにバインドするために、xaml で宣言されたイベント ハンドラー/プロパティがあったと思います。詳細については、xaml ファイルのコンテンツを投稿してください。

編集

したがって、それは縫い目ではありません。Xaml ファイルは問題ありませんが、コードは問題ありません。オンラインのコンストラクターで例外がスローされました

System.Drawing.Bitmap b = new
            System.Drawing.Bitmap(@"autumn_scene.jpg");

ビットマップコンストラクターへのこの呼び出しが無効である理由はわかりませんが、次のように変更します。

System.Drawing.Bitmap b = new Bitmap(
            System.Drawing.Image.FromFile(@"autumn_scene.jpg"));

正常に動作するはずです。

于 2012-07-19T10:50:30.993 に答える