2014-01-25 8 views
2

Я пытался найти достойный учебник о том, как можно QR-коды с Windows Phone 8. К сожалению, все они (по крайней мере, те, которые я нашел, что было большой нагрузкой), предназначались для WP7 и не работали.QR-сканирование на Windows Phone 8

Для некоторых из них требуется объект PhotoLuminance, который недоступен в библиотеке ZXing.net.

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

Мне нужно что-то свободное, без необходимости запуска cameratask :).

Прямо сейчас, я собираю изображение в прямоугольник с помощью компонента VideoBrush, поэтому работа с данными из камеры работает.

camera = new PhotoCamera(CameraType.Primary); 
viewfinderBrush.SetSource(camera); 

Я использую это в крайнем случае, я действительно надеюсь, что кто-то есть пример кода, то там или представление о том, как я должен подойти к этому

ответ

0

Попробуйте ниже данный код с библиотекой ZXing.Net ,

XAML

<Grid x:Name="grdCamera"> 
    <Rectangle x:Name="_previewRect" 
      Margin="0" 
      Height="800" 
      Width="600" 
      HorizontalAlignment="Center" 
      VerticalAlignment="Center"> 
     <Rectangle.Fill> 
      <VideoBrush x:Name="_previewVideo"> 
       <VideoBrush.RelativeTransform> 
        <CompositeTransform 
        x:Name="_previewTransform" CenterX=".5" CenterY=".5" /> 
       </VideoBrush.RelativeTransform> 
      </VideoBrush> 
     </Rectangle.Fill> 
    </Rectangle> 
</Grid> 

C#

private readonly DispatcherTimer _timer; 
private PhotoCameraLuminanceSource _luminance; 
private QRCodeReader _reader; 
private PhotoCamera _photoCamera; 

//Constructor 
public ScanPage() 
{ 
    InitializeComponent(); 

    _timer = new DispatcherTimer(); 
    _timer.Interval = TimeSpan.FromMilliseconds(250); 
    _timer.Tick += (o, arg) => ScanPreviewBuffer(); 
} 

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    _photoCamera = new PhotoCamera(); 
    _photoCamera.Initialized += OnPhotoCameraInitialized; 
    _previewVideo.SetSource(_photoCamera); 

    CameraButtons.ShutterKeyHalfPressed += (o, arg) => _photoCamera.Focus(); 

    base.OnNavigatedTo(e); 
} 

private void OnPhotoCameraInitialized(object sender, CameraOperationCompletedEventArgs e) 
{ 
    int width = Convert.ToInt32(_photoCamera.PreviewResolution.Width); 
    int height = Convert.ToInt32(_photoCamera.PreviewResolution.Height); 

    _luminance = new PhotoCameraLuminanceSource(width, height); 
    _reader = new QRCodeReader(); 

    Dispatcher.BeginInvoke(() => 
    { 
     _previewTransform.Rotation = _photoCamera.Orientation; 
     _timer.Start(); 
    }); 
} 

private void ScanPreviewBuffer() 
{ 
    try 
    { 
     _photoCamera.GetPreviewBufferY(_luminance.PreviewBufferY); 
     var binarizer = new HybridBinarizer(_luminance); 
     var binBitmap = new BinaryBitmap(binarizer); 
     var result = _reader.decode(binBitmap); 
     Dispatcher.BeginInvoke(() => MessageBox.Show(result.Text)); 
    } 
    catch 
    { 
    } 
} 
+0

Смотрите страницу http://jonas.follesoe.no/2011/07/22/qr-code-scanning-on-windows-phone- 75-using-zxlib/для определения PhotoCameraLuminanceSource –