現在、ユーザーが 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!");
}
エラーの原因となっているのは、結果のテキスト値が取得されているときです。私はまだそれを修正する方法を知りません。
誰かが私にアドバイスできますか?
ありがとう