7

iPhoneのカメラからフレームをキャプチャし、これらのフレームで処理を行うアプリを作成しようとしています。インターネットで見つかったコードをいくつか試しました。例:iOSでプレビューを表示せずに画像をキャプチャする方法

そして、私は次のコードになりました。

-(IBAction)captureNow{
    AVCaptureConnection *videoConnection = nil;
    for (AVCaptureConnection *connection in stillImageOutput.connections)
    {
        for (AVCaptureInputPort *port in [connection inputPorts])
        {
            if ([[port mediaType] isEqual:AVMediaTypeVideo] )
            {
                videoConnection = connection;
                break;
            }
        }
        if (videoConnection) { break; }
    }

    //  NSLog(@"about to request a capture from: %@", stillImageOutput);
    [stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler: ^(CMSampleBufferRef imageSampleBuffer, NSError *error)
     {
         CFDictionaryRef exifAttachments = CMGetAttachment( imageSampleBuffer, kCGImagePropertyExifDictionary, NULL);
         if (exifAttachments)
         {
             // Do something with the attachments.
             NSLog(@"attachements: %@", exifAttachments);
         }
         else
             NSLog(@"no attachments");

         NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer];
         UIImage *image = [[UIImage alloc] initWithData:imageData];

         //  do the processing with the image       
         }

ただし、アプリがcaptureStillImageAsynchronouslyFromConnectionメソッドのハンドラーコードブロックに入ることがないため、フレームから画像を取得することはありません。私は間違った方法で何かをしていますか?あなたの提案をありがとう!

4

2 に答える 2

8

自動参照カウント モードでは、ポインタがAVCaptureSession適切に保持されないことがわかりました。AVCaptureStillImageOutput

これは、次の 2 つのオプションがあることを意味します。

  • 自動参照カウントを無効にする、または

  • 自分自身へのポインターを保持しAVCaptureSessionます (たとえば、コントローラーの強力なプロパティに割り当てることによって)。

于 2014-02-11T13:28:38.953 に答える