2011-11-29 84 views
1

我的iOS應用兩個庫應該是在同一時間完成下列兩項任務:訪問iPhone的攝像頭,在一個應用程序

  1. 掃描使用zbar和SDK QR代碼,
  2. 掃描用於增強現實使用QCAR SDK的標記。

或者換句話說:我在尋找通過AR標記包圍QR標籤。

這兩個任務應該「實時」運行。我的第一個幼稚的方法表明,在一個應用程序中組合兩個SDK將導致初始化的SDK在第二個SDK初始化時停止工作。

有人有建議嗎?謝謝。

回答

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

,您可以使用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); 
} 
} 
+0

非常高興看到這可以做到。 – Randall

0

你只能有一個攝像頭會在同一時間運行,所以你需要弄清楚如何獲得zbar和和QCar使用同一個。

+0

好了,謝謝你。我想我必須在SDK中深入挖掘。 – Morin