【问题标题】:How to recognize QR code from image using ZXing library?如何使用 ZXing 库从图像中识别二维码?
【发布时间】:2017-03-23 01:14:06
【问题描述】:

我有 Xamarin Android 项目,我想从相机识别二维码并同时将图片保存到存储中。我使用 Android.Hardware.Camera.IPreviewCallback 从相机获取图像。保存图像按预期工作,但二维码识别失败。这是我的代码:

void Android.Hardware.Camera.IPreviewCallback.OnPreviewFrame(byte[] data, Android.Hardware.Camera camera)
{
    byte[] jpegData = ConvertYuvToJpeg(data);
    Bitmap bitmap = BytesToBitmap(jpegData);
    SaveBitmapImage(bitmap); // This works great


    var width = (int)_textureView.Width;
    var height = (int)_textureView.Height;

    // How to get LuminanceSource??
    //LuminanceSource source = new RGBLuminanceSource(rgbValues, bm.Width, bm.Height, RGBLuminanceSource.BitmapFormat.ARGB32);
    //LuminanceSource source = new RGBLuminanceSource( jpegData, width, height);
    LuminanceSource source = new PlanarYUVLuminanceSource(data, width, height, 
        0, 0, width, height, false);
    BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));

    QRCodeReader reader = new QRCodeReader();
    var result = reader.decode(binaryBitmap);
}

致电

var result = reader.decode(binaryBitmap);

总是返回 null。

编辑:

看来问题出在相机上。它不专注于二维码,图像模糊,ZXing 库无法解码。如何让相机对焦?

【问题讨论】:

    标签: xamarin xamarin.android qr-code zxing


    【解决方案1】:

    问题在于相机对焦。必须设置对焦模式。这是一个代码:

    var parameters = _camera.GetParameters();
    parameters.FocusMode = GetOptimalFocusMode(parameters);
    _camera.SetParameters(parameters);
    
    private String GetOptimalFocusMode(Android.Hardware.Camera.Parameters parameters)
    {
        String result;
        IList<String> focusModes = parameters.SupportedFocusModes;
    
        if (focusModes.Contains(Android.Hardware.Camera.Parameters.FocusModeContinuousVideo))
        {
            result = Android.Hardware.Camera.Parameters.FocusModeContinuousVideo;
        }
        else if (focusModes.Contains(Android.Hardware.Camera.Parameters.FocusModeAuto))
        {
            result = Android.Hardware.Camera.Parameters.FocusModeAuto;
        }
        else
        {
            result = parameters.SupportedFocusModes.First();
        }
    
        return result;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-12
      • 1970-01-01
      • 1970-01-01
      • 2014-08-14
      • 1970-01-01
      • 2014-02-24
      相关资源
      最近更新 更多