抓取相机数据并将其转换为WriteableBitmap以进行BarCode扫描

时间:2013-07-16 15:46:13

标签: c# windows-phone-7 camera barcode-scanner


我正在使用Windows Phone 7

我想在Timer对象的每个刻度上执行以下操作:

  1. 从PhotoCamera对象中获取相机数据
  2. 将其'数据转换为WritableBitmap。
  3. 我遇到系统异常错误。

    这是我的代码

            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);        
    
            }
    

    “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的目的是什么?

    我正在构建条形码扫描仪,我需要使用WritableBitmap数据作为ZXing库的输入,以便在使用相机时解码图像上的条形码。

    我是C#的新手,但感谢您提前帮助我解决此问题:)

1 个答案:

答案 0 :(得分:1)

如果您不需要将WriteableBitmap用于其他目的,则不应将亮度数据从相机转换为位图对象。这是一种不必要的转换。使用ZXing直接使用亮度值。它快得多。 ZXing.Net项目提供了一些Windows手机样本,展示了它的工作原理。

如果您确实需要WriteableBitmap对象,则必须将Y数据从摄像机转换为ARGB32表示。或者使用方法GetPreviewBufferArgb,然后使用生成的int数组作为图像源。