我正在使用Windows Phone 7
我想在Timer对象的每个刻度上执行以下操作:
我遇到系统异常错误。
这是我的代码
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#的新手,但感谢您提前帮助我解决此问题:)
答案 0 :(得分:1)
如果您不需要将WriteableBitmap用于其他目的,则不应将亮度数据从相机转换为位图对象。这是一种不必要的转换。使用ZXing直接使用亮度值。它快得多。 ZXing.Net项目提供了一些Windows手机样本,展示了它的工作原理。
如果您确实需要WriteableBitmap对象,则必须将Y数据从摄像机转换为ARGB32表示。或者使用方法GetPreviewBufferArgb,然后使用生成的int数组作为图像源。