2013-07-16 1 views
0


Я использую Windows Phone 7Захват данных камеры и преобразовать его в WritableBitmap для штрихкода просмотрит

Я хочу сделать следующее на каждом такте объекта таймера:

  1. Захват данных камеры от объекта фотоаппаратом
  2. преобразовать свои данные в 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; 

У меня есть ошибки при выполнении создания WritableBitmap

bitmap.SetSource(mem); 

Я проверил предыдущие строки в отладчике, и ни один из них не является нулевым и т. Д.

Какова моя цель в создании WritableBitmap таким образом?

Я строю сканер штрих-кода, и мне нужны данные WritableBitmap в качестве входных данных для библиотеки ZXing для декодирования штрих-кода на изображении при использовании камеры.

Я новичок в C# вещи, но спасибо заранее лет за ваше время, помогая мне решить этот вопрос :)

ответ

1

Если вы не нуждаетесь в WriteableBitmap для других целей, вы не должны преобразовывать данные яркости от камеры к растровому объекту. Это ненужное обращение. Используйте значения яркости непосредственно с ZXing. Это намного быстрее. Проект ZXing.Net предоставляет некоторые образцы телефонов Windows, которые показывают, как это работает.

Если вам действительно нужен объект WriteableBitmap, вам необходимо преобразовать данные Y из камеры в представление ARGB32. Или вы используете метод GetPreviewBufferArgb, а затем используйте полученный массив int в качестве источника изображения.