在一个应用程序中访问带有两个库的iPhone相机

Mor*_*rin 1 iphone camera qr-code augmented-reality ios

我的iOS应用程序应该同时执行以下两个任务:

  1. 使用ZBar SDK扫描QR标签,
  2. 使用QCAR SDK扫描增强现实标记.

换句话说:我正在寻找被AR标记包围的QR标签.

这两项任务都应该"实时"运行.我的第一个天真的方法表明,在一个应用程序中将两个SDK组合将导致首次初始化的SDK在初始化第二个SDK时停止工作.

有人有建议吗?谢谢.

Mor*_*rin 6

我设法完成了.万一有人喜欢知道:

QCAR仅适用于完整的相机访问.因此,必须按照其文档中的说明对其进行初始化和启动.幸运的是,它提供了对处理过的摄像机图像的访问作为原始RGB数据.我使用此代码将原始数据转换为UIImage:

QCAR::setFrameFormat(QCAR::GRAYSCALE, true);
const QCAR::Image *image = state.getFrame().getImage(1); // 0: YUV, 1: Grayscale image
const char *data = (const char *)image->getPixels();
int width = image->getWidth(); int height = image->getHeight();

CGColorSpace *colorSpace = CGColorSpaceCreateDeviceGray();
CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;
CGDataProvider *provider = CGDataProviderCreateWithData(NULL, data, width*height, NULL);
CGColorRenderingIntent intent = kCGRenderingIntentDefault;
CGImageRef imageRef = CGImageCreate(width, height, 8, 8, width * 1, colorSpace, bitmapInfo, provider, NULL, NO, intent);
myUIImage = [UIImage imageWithCGImage:imageRef];
Run Code Online (Sandbox Code Playgroud)

现在,你可以像这样使用ZBar的ZBarImageScanner类:

ZBarImageScanner *imageScanner = [[ZBarImageScanner alloc] init];
ZBarImage *image = [[ZBarImage alloc] initWithCGImage:myUIImage.CGImage];
int result = [imageScanner scanImage:image];

if (result > 0) {
 ZBarSymbolSet *symbols = imageScanner.results;
 for(ZBarSymbol *symbol in symbols) {
  NSLog(@"%@", symbol.data);
 }
}
Run Code Online (Sandbox Code Playgroud)