Objective c 在OSX中使用ZXing获取QRCode数据

Objective c 在OSX中使用ZXing获取QRCode数据,objective-c,macos,qr-code,zxing,Objective C,Macos,Qr Code,Zxing,我希望实现一个类,能够从文件(jpeg、bmp等)中读取二维码,并将该信息作为NSString输出 我遇到的问题是,每个项目似乎都围绕着让iPhone用摄像头来完成这项工作 我希望在OSX桌面上用一个图像文件完成这项工作。我曾尝试使用ZXing附带的Objective-COSx项目,但我无法让它与我自己的项目配合得很好 有人成功地做到了这一点吗?谢谢 这就是我的想法,它似乎对我有用 - (NSString*) movieFrameAsString:(CGImageRef)targetMovieF

我希望实现一个类,能够从文件(jpeg、bmp等)中读取二维码,并将该信息作为NSString输出

我遇到的问题是,每个项目似乎都围绕着让iPhone用摄像头来完成这项工作

我希望在OSX桌面上用一个图像文件完成这项工作。我曾尝试使用ZXing附带的Objective-COSx项目,但我无法让它与我自己的项目配合得很好


有人成功地做到了这一点吗?谢谢

这就是我的想法,它似乎对我有用

- (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。其他的一切都是被捕获并返回的异常。

所以这就是我的想法,它似乎对我有用

- (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。其他一切都是捕获并返回的异常。

我在OSX OBJC项目上有点运气,但它仍然没有结合在一起。我还没有找到任何人成功地做到这一点!我没有使用这个特定的框架,但是您可能希望查看相机图像转换为UIImage的点。您可以将其作为MacOSX实现的起点,因为发生在UIImage上的任何事情都可能(大致)发生在NSImage上。谢谢Phil,我实际上解决了这个问题,现在它运行得很好。我为zxing做了大多数OS X项目文件和分解。这是相当新的,几乎没有记录。请随时向发布问题和/或贡献。嘿,斯帕克斯!肯定我看到OSX项目的进展并不顺利。我所尝试的(我可以想象)是相对简单的。但我很乐意尽我所能为你们做出贡献,以帮助其他新来者。我在OSX OBJC项目上有点运气,但它仍然不在一起。我还没有找到任何人成功地做到这一点!我没有使用这个特定的框架,但是您可能希望查看相机图像转换为UIImage的点。您可以将其作为MacOSX实现的起点,因为发生在UIImage上的任何事情都可能(大致)发生在NSImage上。谢谢Phil,我实际上解决了这个问题,现在它运行得很好。我为zxing做了大多数OS X项目文件和分解。这是相当新的,几乎没有记录。请随时向发布问题和/或贡献。嘿,斯帕克斯!肯定我看到OSX项目的进展并不顺利。我所尝试的(我可以想象)是相对简单的。但我愿意尽我所能为你们做贡献,帮助其他新来者。看起来很干净。您应该自动释放对象,或者将释放放在@finally子句中。就目前情况而言,你会泄露未解码的图像。看起来很干净。您应该自动释放对象,或者将释放放在@finally子句中。目前,您将泄漏未解码的图像。