0


ウィンドウズフォン7を使用しています

Timer オブジェクトのすべてのティックで次のことを行いたい:

  1. PhotoCamera オブジェクトからカメラ データを取得する
  2. そのデータを WritableBitmap に変換します。

システム例外エラーで立ち往生しています。

これが私のコードです

        if (camReady == true)
        {

            try
            {
                var image = new Image();
                byte[] ba = new byte[camBufferSize];
                cam.GetPreviewBufferY(ba);
                var mem = new MemoryStream(ba);
                bitmap.SetSource(mem);

                var result = reader.Decode(bitmap);

                if (result == null)
                {
                    txtDebug.Text = "Tick\t" + savedCounter + "\n" + (result == null ? "Result jest nullem" : result.Text) + "\tsize " + buffer.Length
                        + "\nPierwszy elem" + buffer[0];
                    //+ "\nByteArray Len "+byteArray.Length
                    //+ "\nFirst Elem of ByteArray "+byteArray[0];
                }
                else
                {
                    txtDebug.Text = "HURRAAAAAAAA!!!!"+
                    "\nresult.Text\t" + result.Text;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("{0} Exception caught.", ex);
                 txtDebug.Text = "{0} Exception caught.\t"+ ex;
            }
            Console.WriteLine("Buffer", buffer);
            if (savedCounter % 6 == 0) cam.Focus();
            //var result = reader.Decode(bitmap);        

        }

「ビットマップ」オブジェクトと camBufferSize オブジェクトは、コードの別の部分で作成されます

 bitmap = new WriteableBitmap((int)cam.Resolution.Width, (int)cam.Resolution.Height);
 camBufferSize = (int)cam.Resolution.Width * (int)cam.Resolution.Height;

WritableBitmap の作成中にエラーが発生しました

bitmap.SetSource(mem);

デバッガーで前の行を確認しましたが、null などではありません。

このように WritableBitmap を作成する目的は何ですか?

私はバーコードスキャナーを構築しています.ZXingライブラリの入力としてWritableBitmapデータが必要で、カメラを使用するときに画像のバーコードをデコードします。

私はC#の初心者ですが、この問題を解決するのを手伝ってくれてありがとうございます:)

4

1 に答える 1

1

他の目的で WriteableBitmap を必要としない場合は、カメラからの輝度データをビットマップ オブジェクトに変換しないでください。不要な変換です。ZXing で輝度値を直接使用します。それははるかに高速です。ZXing.Net プロジェクトは、それがどのように機能するかを示すいくつかの Windows Phone サンプルを提供します。

本当に WriteableBitmap オブジェクトが必要な場合は、カメラからの Y データを ARGB32 表現に変換する必要があります。または、メソッド GetPreviewBufferArgb を使用して、結果の int 配列を画像ソースとして使用します。

于 2013-07-16T19:42:26.460 に答える