抓取相机数据并将其转换为可写入位图以进行条形码扫描
本文关键字:位图 扫描 条形码 数据 相机 转换 抓取 | 更新日期: 2023-09-27 18:22:29
我正在使用windows phone 7
我想在Timer对象的每个刻度上做以下事情:
- 从PhotoCamera对象获取相机数据
- 将其"数据转换为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;
创建可写位图时出错
bitmap.SetSource(mem);
我已经在调试器中检查了以前的行,没有一行是空的。
我以这种方式创建可写位图的目的是什么?
我正在构建条形码扫描仪,我需要WritableBitmap数据作为ZXing库的输入,以便在使用相机时解码图像上的条形码。
我是C#的新手,但提前感谢您花时间帮助我解决这个问题:)
如果您不需要WriteableBitmap用于其他用途,则不应将相机的亮度数据转换为位图对象。这是不必要的转换。将亮度值直接与ZXing一起使用。它要快得多。ZXing.Net项目提供了一些windows手机示例,展示了它的工作原理。
如果您确实需要WriteableBitmap对象,则必须将相机的Y数据转换为ARGB32表示。或者使用GetPreviewBufferArgb方法,然后使用生成的int数组作为图像源。