我目前正在尝试在 Unity(适用于 iOS)中创建一个允许用户扫描 QR 码的应用程序。我正在使用针对 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;
}
}
}
执行到达“开始解码!” 打印语句,但未能达到“已通过解码!” 陈述。
这是因为 Decode() 方法每次都会产生一个未知的异常,即使相机正在查看一个非常清晰的 QR 码。
供参考: c 是 Color32[] 类型,使用 WebCamTexture.GetPixels32() 生成 W、H 是表示相机纹理宽度和高度的整数。
由于某种原因,我无法在 catch 子句中捕获通用异常,这意味着我无法确定 Decode() 方法正在生成哪种异常。
编辑:我使用的代码改编自 ZXing.NET 项目提供的 Unity 演示。我正在使用当前版本的 ZXing.NET。我还应该提到,我目前正在 iMac 上进行测试,而不是在 iOS 设备或模拟器上进行测试。我尝试从头开始运行 Unity 演示,并获得了相同的结果。
这就是 c 变量 (Color32[]) 的更新方式:
void Update()
{
if (c == null)
{
c = camTexture.GetPixels32();
H = camTexture.height;
W = camTexture.width;
}
}
编辑 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!");
}
正是在检索结果的文本值时才导致错误。我仍然不知道如何解决它。
有人可以给我建议吗?
谢谢