3

現在、ユーザーが QR コードをスキャンできるようにするアプリケーションを Unity (iOS 用) で作成しようとしています。Unity 用に最適化された ZXing.NET ライブラリを使用しています。

これは私が使用している現在のデコードスレッドです

    void DecodeQR()
   {  
    // create a reader with a custom luminance source

      var barcodeReader = new BarcodeReader {AutoRotate=false, TryHarder=false};

      while (true)

      {
         if (isQuit)

            break;

         try

         {
            string result = "Cry if you see this."; 

            // decode the current frame

            if (c != null){

                print ("Start Decode!");
                result = barcodeReader.Decode(c, W, H).Text; //This line of code is generating unknown exceptions for some arcane reason
                print ("Got past decode!");
            }       
            if (result != null)
            {           
               LastResult = result;        
               print(result);
            }
            // Sleep a little bit and set the signal to get the next frame
        c = null;
            Thread.Sleep(200); 
         }
            catch 
            {   
                continue;
            }

      }
    }

実行は「Start Decode!」に到達します。print ステートメントを実行しましたが、「Got past decode!」に到達できませんでした。声明。

これは、カメラが非常に明確な QR コードを見ている場合でも、Decode() メソッドが毎回不明な例外を生成しているためです。

参考までに: c は Color32[] 型で、WebCamTexture.GetPixels32() を使用して生成されます。W、H は、カメラ テクスチャの幅と高さを表す整数です。

何らかの理由で、catch 句内で一般的な Exception をキャッチできません。つまり、Decode() メソッドが生成している例外の種類を判断できません。

編集:私が使用したコードは、ZXing.NET プロジェクトから入手可能な Unity デモから適応されます。現在のバージョンの ZXing.NET を使用しています。また、現在、iOS デバイスやシミュレーターではなく、iMac でこれをテストしていることにも言及する必要があります。Unity デモをゼロから実行してみましたが、同じ結果が得られました。

これは、c 変数 (Color32[]) が更新される方法です。

void Update()
   {
      if (c == null)
      {
            c = camTexture.GetPixels32();
            H = camTexture.height;
            W = camTexture.width;
      }



   }

編集 2: デコード ステージを 2 つのビットに分割しました。最初に結果オブジェクトを生成し、次に示すように結果のテキスト プロパティを取得します。

if (c != null){
                print ("Start Decode!");
                var initResult = barcodeReader.Decode(c, W, H); 
                print ("Got past decode!");
                result = initResult.Text; //This line of code is generating unknown exceptions for some arcane reason
                print ("Got past text conversion!");
            }

エラーの原因となっているのは、結果のテキスト値が取得されているときです。私はまだそれを修正する方法を知りません。

誰かが私にアドバイスできますか?

ありがとう

4

2 に答える 2

2

コードは、ZXing.Net プロジェクトの Unity デモのように見えます。現在のバージョン 0.10.0.0 でもう一度デモを試してみました。それは私にとって魅力のように機能します。しかし、私はWindows上でユニティでしかテストできません。iOSで試す機会がありません。

ZXing.Net の最新バージョンを試しましたか? Unityのどのバージョンを使用していますか?Update メソッド内で変数 c が正しく設定されていますか?

于 2012-11-27T06:52:49.420 に答える
0

私は問題を解決しました。問題は、カメラから取得されたテクスチャが正しい縦横比ではなく、「押しつぶされた」ことでした。その結果、ZXing ライブラリはコードを正しく認識できませんでした。

この問題を修正した後、認識は問題なく機能しました。

于 2012-12-18T01:26:57.900 に答える