1

私は QCAR ライブラリを使用しており、各フレームのライブラリからカメラ フレームを取得します。

setImageを使用してこのフレームを表示しようとしていUIImageView* mCurFrameViewます。これは最初は機能し、フレームがスムーズに実行されることを確認できますが、20 秒後にクラッシュします。

たまに乗りEXC_BAD_ACCESSます

int retVal = UIApplicationMain(argc, argv, nil, nil); 

時々それはただのgdbで一時停止しています。

彼がクラッシュする前に時々私は得る

2012-02-24 15:59:15.726 QRAR_nextGen[226:707] Received memory warning.

これが私のコードです:

-(void)SaveCurrentFrame:(UIImage*)image
{

        mCurFrameView.image = image;

}


- (void)renderFrameQCAR
{

   cout<<"I am starting"<<endl;


QCAR::State state = QCAR::Renderer::getInstance().begin();


QCAR::setFrameFormat(QCAR::RGB888, true);

const QCAR::Image *image = state.getFrame().getImage(1);// 0: YUV, 1: Grayscale image

if (image)
{
    const char *data = (const char *)image->getPixels();
    int width = image->getWidth(); int height = image->getHeight();

    colorSpace = CGColorSpaceCreateDeviceRGB();
    bitmapInfo = kCGBitmapByteOrderDefault;
    provider = CGDataProviderCreateWithData(NULL, data, width*height*3, NULL);
    intent = kCGRenderingIntentDefault;
    imageRef = CGImageCreate(width, height, 8, 8*3, width * 3, colorSpace, bitmapInfo,    provider, NULL, NO, intent);

    mCurFrame = [UIImage imageWithCGImage:imageRef];


    cout<<"I am waiting"<<endl;
   [self performSelectorOnMainThread:@selector(SaveCurrentFrame:) withObject:mCurFrame waitUntilDone:YES];

}

私はいくつかのことを試しました: カメラを表示する CALayer の表示、解放、保持、自動解放、プロパティの定義と非定義、および合成。

誰かが私を助けることができれば、とても感謝しています。私は私の心を失っています。どうもありがとう。

4

3 に答える 3

0

各 CGDataProvider を解放 (リーク) していません。つまり、すべての画像データをメモリに保存しています。performSelectorOnMainThread の後に CGDataProviderRelease(provider) を実行してみてください。

于 2012-02-26T20:33:18.350 に答える
0

多分あなたはこれを見逃しています:

   QCAR::Renderer::getInstance().end();

これは、iPhone 4S/5 iOS 6 で動作するスニペットです。

- (void)renderFrameIntoImage {
   QCAR::State state = QCAR::Renderer::getInstance().begin();
   QCAR::setFrameFormat(QCAR::GRAYSCALE, true);
   const QCAR::Image *image = state.getFrame().getImage(0); // 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);
   UIImage *myImage = [UIImage imageWithCGImage:imageRef];
   QCAR::Renderer::getInstance().end();
   UIImageWriteToSavedPhotosAlbum(myImage, nil, nil, NULL);
}

よろしく...

于 2013-04-10T22:50:19.223 に答える