Ios ZXingObjC can';t解码从UIImagePickerController获取的图像

Ios ZXingObjC can';t解码从UIImagePickerController获取的图像,ios,objective-c,qr-code,zxing,Ios,Objective C,Qr Code,Zxing,我用下面的代码来解码摄像机上的QR码 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { originalImage = (UIImage *) [info objectForKey: UIImagePickerControllerEditedImage]

我用下面的代码来解码摄像机上的QR码

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{  
originalImage = (UIImage *) [info objectForKey:
                             UIImagePickerControllerEditedImage];

ZXQRCodeReader *reader = [[ZXQRCodeReader alloc]init];

 ZXLuminanceSource *source = [[ZXCGImageLuminanceSource alloc] initWithCGImage:[originalImage CGImage]];
ZXHybridBinarizer *binazer = [ZXHybridBinarizer binarizerWithSource:source];
ZXBinaryBitmap *bitmap = [[ZXBinaryBitmap alloc]initWithBinarizer:binazer];

NSError *error;
ZXResult *result = [reader decode:bitmap
                            hints:nil
                            error:&error];
if(result){
    [[[UIAlertView alloc] initWithTitle:@"Success" message:@"Success"
                               delegate:nil
                      cancelButtonTitle:@"OK"
                      otherButtonTitles:nil, nil] show];
} else {
    // Use error to determine why we didn't get a result, such as a barcode
    // not being found, an invalid checksum, or a format inconsistency.
    [[[UIAlertView alloc] initWithTitle:@"ERROR" message:[error localizedDescription]
                               delegate:nil
                      cancelButtonTitle:@"OK"
                      otherButtonTitles:nil, nil] show];
}
然而,我收到一条错误消息,说在图像上没有找到条形码。另一方面,如果我使用ZXingObjC提供的测试图像,那么问题就出在尝试UIImagePickerController图像时。那么有什么想法可能是错的吗


非常感谢。

我对ZXingObjC端口不太熟悉,所以YMMV。zxing启发式算法已针对手机上实时视频预览流提供的相对低分辨率图像进行了调整。在现代手机上,从静止摄像头拍摄的图像分辨率非常高。。。足够高,可以从LCD上分辨单个像素(至少高达2K个显示器)。zxing通常要求对此类高分辨率图像进行低通滤波。最简单的方法是对图像进行抽取/下采样。这就是我从一张stil相机图像解码时所做的:首先在本机分辨率下进行尝试,然后将其压缩到1000x1000以下。一个或另一个通常有效。

smparkes评论的一个更新是,通过简单地将UIImage大小减小到640x480,库可以与UIImagePickerController生成的图像完美配合,至少在我的iPhone 5上是如此。我每次都是用这种方式获取UPC代码。

检查原始图像和位图是否正确,图像的ZXing扫描是否完美。我使用几种预定义的分辨率来缩放图像<代码>NSArray*大小=@[[NSValue Value WithCGSize:CGSizeMake(480.f,480.f)],[NSValue ValueWithCGSizeMake:CGSizeMake(640.f,640.f)],[NSValue ValueWithCGSizeMake:CGSizeMake(640.f,480.f)];对于(NSValue*大小值){//scale to value.CGSizeValue and decode}