【问题标题】:iPhone Camera access?iPhone 相机访问权限?
【发布时间】:2011-04-03 06:20:15
【问题描述】:

我想知道如何访问 iphone 相机并实时使用它:例如,只需在相机视图上绘图。

另一个相关问题:

我可以像在 Mac 上的“Photo Booth”中那样一次显示 4 个相机视图吗?

【问题讨论】:

  • 我假设您也想对每一个都应用效果,就像在 Mac 上一样。考虑到实现这一点所需的 GPU 功率,不确定这是否适用于 iPhone 4 以外的任何设备。

标签: ios iphone view camera photo


【解决方案1】:

您可以尝试拥有 4 个 UIImagePickerControllers。不确定它是否会起作用,但值得一试。

Access the camera with iPhone SDK

【讨论】:

    【解决方案2】:

    您可以使用 AVFoundation 来做到这一点

    - (void)initCapture {
    
        AVCaptureDeviceInput *captureInput = [AVCaptureDeviceInput 
                                              deviceInputWithDevice:[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo] 
                                              error:nil];
    
        AVCaptureVideoDataOutput *captureOutput = [[AVCaptureVideoDataOutput alloc] init];
    
        captureOutput.alwaysDiscardsLateVideoFrames = YES; 
    
        dispatch_queue_t queue;
        queue = dispatch_queue_create("cameraQueue", NULL);
        [captureOutput setSampleBufferDelegate:self queue:queue];
        dispatch_release(queue);
    
        NSString* key = (NSString*)kCVPixelBufferPixelFormatTypeKey; 
        NSNumber* value = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA]; 
        NSDictionary* videoSettings = [NSDictionary dictionaryWithObject:value forKey:key]; 
        [captureOutput setVideoSettings:videoSettings]; 
    
    
        self.captureSession = [[AVCaptureSession alloc] init];
        [self.captureSession setSessionPreset:AVCaptureSessionPresetLow];
    
        [self.captureSession addInput:captureInput];
        [self.captureSession addOutput:captureOutput];
    
        [self.captureSession startRunning];
    
        self.customLayer = [CALayer layer];
    
        self.customLayer.frame =CGRectMake(5-25,25, 200,150);
    
        self.customLayer.transform = CATransform3DRotate(CATransform3DIdentity, M_PI/2.0f, 0, 0, 1);
    
        //self.customLayer.transform =CATransform3DMakeRotation(M_PI/2.0f, 0, 0, 1);
    
    
        //[self.view.layer addSublayer:imageView.layer];
        //self.customLayer.frame =CGRectMake(0, 0, 200,150);
        //self.customLayer.contentsGravity = kCAGravityResizeAspectFill;
    
        [self.view.layer insertSublayer:self.customLayer atIndex:4];
        //[self.view.layer addSublayer:self.customLayer];
    
    
        self.customLayer1 = [CALayer layer];
        //self.customLayer.frame = self.view.bounds;
        self.customLayer1.frame =CGRectMake(165-25, 25, 200, 150);
        self.customLayer1.transform = CATransform3DRotate(CATransform3DIdentity, M_PI/2.0f, 0, 0, 1);
        //self.customLayer1.contentsGravity = kCAGravityResizeAspectFill;
        [self.view.layer addSublayer:self.customLayer1];
    
    
    
    
        self.customLayer2 = [CALayer layer];
        //self.customLayer.frame = self.view.bounds;
        self.customLayer2.frame =CGRectMake(5-25, 210 +25, 200, 150);
        self.customLayer2.transform = CATransform3DRotate(CATransform3DIdentity, M_PI/2.0f, 0, 0, 1);
        //self.customLayer1.contentsGravity = kCAGravityResizeAspectFill;
        [self.view.layer addSublayer:self.customLayer2];
    
    
        self.customLayer3 = [CALayer layer];
        //self.customLayer.frame = self.view.bounds;
        self.customLayer3.frame =CGRectMake(165-25, 210 +25, 200, 150);
        self.customLayer3.transform = CATransform3DRotate(CATransform3DIdentity, M_PI/2.0f, 0, 0, 1);
        //self.customLayer1.contentsGravity = kCAGravityResizeAspectFill;
        [self.view.layer addSublayer:self.customLayer3];
    
    
    
    }
    
    
    
    #pragma mark -
    #pragma mark AVCaptureSession delegate
    - (void)captureOutput:(AVCaptureOutput *)captureOutput 
    didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer 
           fromConnection:(AVCaptureConnection *)connection 
    { 
    
    
        NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    
        CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); 
        /*Lock the image buffer*/
        CVPixelBufferLockBaseAddress(imageBuffer,0); 
        /*Get information about the image*/
        uint8_t *baseAddress = (uint8_t *)CVPixelBufferGetBaseAddress(imageBuffer); 
        size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer); 
        size_t width = CVPixelBufferGetWidth(imageBuffer); 
        size_t height = CVPixelBufferGetHeight(imageBuffer);  
    
    
        /*Create a CGImageRef from the CVImageBufferRef*/
        CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
    
    
    
        CGContextRef newContext = CGBitmapContextCreate(baseAddress, width, height, 8, bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);
        CGImageRef newImage2 = CGBitmapContextCreateImage(newContext); 
        /*We release some components*/
        CGContextRelease(newContext); 
        CGColorSpaceRelease(colorSpace);
    
        [self.customLayer performSelectorOnMainThread:@selector(setContents:) withObject: (id) newImage2 waitUntilDone:YES];
        [self.customLayer1 performSelectorOnMainThread:@selector(setContents:) withObject: (id) newImage2 waitUntilDone:YES];
        [self.customLayer2 performSelectorOnMainThread:@selector(setContents:) withObject: (id) newImage2 waitUntilDone:YES];
        [self.customLayer3 performSelectorOnMainThread:@selector(setContents:) withObject: (id) newImage2 waitUntilDone:YES];
    
    
        //  UIImage *image= [UIImage imageWithCGImage:newImage scale:1.0 orientation:UIImageOrientationRight];
    
    
        /*We relase the CGImageRef*/
        CGImageRelease(newImage2);
    
        //  [self.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:YES];
    
        /*We unlock the  image buffer*/
        CVPixelBufferUnlockBaseAddress(imageBuffer,0);
    
        [pool drain];
    
    } 
    

    效果很好..

    http://crayoncoding.blogspot.com/2011/04/iphone-4-camera-views-at-once.html

    详细代码见以上链接

    【讨论】:

      猜你喜欢
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-05
      • 1970-01-01
      • 2016-06-30
      • 1970-01-01
      • 2016-03-17
      相关资源
      最近更新 更多