Использование ZXing в OSX для получения данных QRCode - PullRequest
2 голосов
/ 25 июня 2011

Я хочу реализовать класс, который сможет читать QR-код из файла (jpeg, bmp и т. Д.) И выводить эту информацию в виде строки NSString.

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

Я хочу сделать это на рабочем столе OSX с файлом изображения. Я пытался использовать проект Objective C OSX, включенный в ZXing, но я не смог заставить его хорошо играть с моими собственными проектами.

Кто-нибудь имел успех в этом? Спасибо!

1 Ответ

0 голосов
/ 23 августа 2012

Итак, вот что я придумал, и, похоже, это работает для меня.

- (NSString*) movieFrameAsString:(CGImageRef)targetMovieFrame
{
    @try 
    {        
        ZXCGImageLuminanceSource* luminancesource = [[ZXCGImageLuminanceSource alloc] initWithCGImage:targetMovieFrame];
        ZXHybridBinarizer* binarizerInput = [[ZXHybridBinarizer alloc] init];
        [binarizerInput initWithSource:luminancesource];
        ZXBinaryBitmap* binarybitmapInput = [[ZXBinaryBitmap alloc] initWithBinarizer:binarizerInput];
        ZXDecodeHints* decodehints   = [[ZXDecodeHints alloc] init];
        ZXQRCodeReader* qrcodereader = [[ZXQRCodeReader alloc] init];

        ZXResult* results = [qrcodereader decode:binarybitmapInput hints:decodehints];

        [luminancesource release];
        [binarizerInput release];
        [binarybitmapInput release];
        [decodehints release];
        [qrcodereader release];

        return [results text];
    }

    @catch (ZXReaderException* rex)
    {
        if (![rex.reason isEqualToString:@"Could not find three finder patterns"]) 
        {
            //NSLog(@"failed to decode, caught ReaderException '%@'", rex.reason);
        }
    } 

    @catch (ZXIllegalArgumentException* iex) 
    {
        //NSLog(@"failed to decode, caught IllegalArgumentException '%@'", iex.reason);
    }

    @catch (id ue) 
    {
        //NSLog(@"Caught unknown exception: %@", ue);
    }

    return 0;
}

Введен объект targetMovieFrame, он пропускает его через набор фильтров для получения двоичного изображения.Он дает результаты, декодируя изображение с использованием подсказок и используя метод, включенный в объект QRCodeReader.Затем я возвращаю результаты, которые являются NSString.Все остальное - только исключения, которые вылавливаются и возвращаются.

...