2

次のコードを使用して、カメラから取得した QRCode をデコードしています

- (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];
}

しかし、Image にバーコードが見つからないというエラー メッセージが表示されます。反対に、ZXingObjC が提供するようなテスト イメージを使用すると動作しますが、問題は UIImagePickerController イメージを試すときだけです。何が間違っているのでしょうか?

どうもありがとう。

4

2 に答える 2

2

私は ZXingObjC への移植にあまり詳しくないので、YMMV です。zxing ヒューリスティックは、電話のライブ ビデオ プレビュー ストリームによって提供される比較的低解像度の画像に合わせて調整されています。最新の携帯電話では、スチル カメラから取得した画像の解像度は非常に高く、LCD (少なくとも 2K ディスプレイまで) の個々のピクセルを解像できるほど高くなっています。zxing では、多くの場合、このような高解像度画像をローパス フィルター処理する必要があります。これを行う最も簡単な方法は、画像をデシメート/ダウンサンプリングすることです。これはスティルカメラの画像からデコードするときに私が行うことです: 最初にネイティブ解像度で試してから、1000x1000 未満にデシメートします。通常、どちらか一方が機能します。

于 2013-04-07T15:24:59.557 に答える
1

smparkes のコメントを更新しただけで、UIImage のサイズを 640x480 に縮小するだけで、少なくとも私の iPhone 5 では UIImagePickerController で生成された画像でライブラリが完全に動作するということです。

于 2013-04-11T02:55:51.653 に答える