gpt4 book ai didi

ios - iPhone相机访问?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:52:33 24 4
gpt4 key购买 nike

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

另一个相关问题:

我可以像在 Mac 上的“Photo Booth”中那样同时显示4 个相机 View 吗?

最佳答案

您可以使用 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

详细代码见上面链接

关于ios - iPhone相机访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3558276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com