- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我有一个从相机中拉出并按预期工作的预览层。我希望能够在按下按钮时拍照。我已经像这样初始化了 AVCaptureStillImageOutput:
AVCaptureStillImageOutput *avCaptureImg = [[AVCaptureStillImageOutput alloc] init];
然后我尝试使用这个对象拍照:
[avCaptureImg captureStillImageAsynchronouslyFromConnection:(AVCaptureConnection *) completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) { }];
我需要有关如何拍照并将其保存在变量中的帮助。谢谢
最佳答案
您需要确保定义一个 AVCaptureVideoPreviewLayer 并将其添加到 View 层:
AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
[self.view.layer addSublayer:captureVideoPreviewLayer];
这将连接到您的 AVCaptureDeviceInput
这是完整的解决方案:
/////////////////////////////////////////////////
////
//// Utility to find front camera
////
/////////////////////////////////////////////////
-(AVCaptureDevice *) frontFacingCameraIfAvailable{
NSArray *videoDevices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
AVCaptureDevice *captureDevice = nil;
for (AVCaptureDevice *device in videoDevices){
if (device.position == AVCaptureDevicePositionFront){
captureDevice = device;
break;
}
}
// couldn't find one on the front, so just get the default video device.
if (!captureDevice){
captureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
}
return captureDevice;
}
/////////////////////////////////////////////////
////
//// Setup Session, attach Video Preview Layer
//// and Capture Device, start running session
////
/////////////////////////////////////////////////
-(void) setupCaptureSession {
AVCaptureSession *session = [[AVCaptureSession alloc] init];
session.sessionPreset = AVCaptureSessionPresetMedium;
AVCaptureVideoPreviewLayer *captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
[self.view.layer addSublayer:captureVideoPreviewLayer];
NSError *error = nil;
AVCaptureDevice *device = [self frontFacingCameraIfAvailable];
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error];
if (!input) {
// Handle the error appropriately.
NSLog(@"ERROR: trying to open camera: %@", error);
}
[session addInput:input];
self.stillImageOutput = [[AVCaptureStillImageOutput alloc] init];
NSDictionary *outputSettings = [[NSDictionary alloc] initWithObjectsAndKeys: AVVideoCodecJPEG, AVVideoCodecKey, nil];
[self.stillImageOutput setOutputSettings:outputSettings];
[session addOutput:self.stillImageOutput];
[session startRunning];
}
/////////////////////////////////////////////////
////
//// Method to capture Still Image from
//// Video Preview Layer
////
/////////////////////////////////////////////////
-(void) captureNow {
AVCaptureConnection *videoConnection = nil;
for (AVCaptureConnection *connection in self.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: %@", self.stillImageOutput);
__weak typeof(self) weakSelf = self;
[self.stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler: ^(CMSampleBufferRef imageSampleBuffer, NSError *error) {
NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer];
UIImage *image = [[UIImage alloc] initWithData:imageData];
[weakSelf displayImage:image];
}];
}
关于ios - 如何使用AVCaptureStillImageOutput拍照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20296827/
我在 iPhone SDK 中的新 AVFoundation 类中遇到了奇怪的行为。 我有一个用于拍照的 AVCaptureStillImageOutput,并且我正在根据自己的喜好设置其输出设置。代
我是第一次使用 AVCaptureStillImageOutput,我在某个时候保存了一张 JPEG 图像。我想保存 PNG 图像而不是 JPEG 图像。我需要为此做什么? 我在应用程序中有这 3 行
我正在使用 captureStillImageAsynchronouslyFromConnection 从相机捕捉图像 图像正在倒置保存。我尝试使用 保存图像 UIImage *flippedImag
我在做一些我认为不应该那么困难的事情上遇到了困难,所以我想我一定是从错误的角度看待问题。为了了解 AVCaptureStillImageOutput 和相机的工作原理,我制作了一个小应用程序。 这个应
我正在使用 AVCaptureStillImageOutput 捕获图像。一切都做得很好。但我尝试导航到新的 View Controller ,快门声很困难。有什么解决方法可以避免这种情况吗? 最佳答
我正在尝试裁剪从 AVCaptureStillImageOutput 获取的图像,但无法在正确的矩形处正确裁剪。 我的相机视频预览为 320x458 帧,裁剪矩形出现在该预览帧内,其坐标和大小为 CG
如何设置完成处理程序: captureStillImageAsynchronouslyFromConnection:completionHandler: 用于 AVCaptureStillImageO
我正在使用 AVCaptureConnection和 AVCaptureStillImageOutput创建覆盖屏幕并捕获图像的类。在 View 中,我有一个自定义选项卡栏,其中包含一些自定义控件,如
这是我迄今为止尝试的相机配置: AVCaptureSession *session = [[AVCaptureSession alloc] init]; [session setSes
我正在做一个项目,我想遮盖用户刚刚用他们的相机拍摄的照片。 mask 以特定的纵横比创建,以将信箱添加到照片。 我可以成功创建图像、创建蒙版并将两者都保存到相机胶卷,但我无法将蒙版应用于图像。这是我现
我目前正在编写一段代码,如下所示: if error == nil && (captureSession?.canAddInput(input))! { captureSession?.add
所以我使用了一些在 Objective C 中执行此操作的代码,并且我一直在将其转换为 swift,并且我正在努力从 AVCaptureStillImageOutput 创建一个 CIImage。因此
我正在尝试从 AVCaptureStillImageOutput 捕获像素数据,并注意到在将图像裁剪为 CGImage 后,它会重新定向。为了对此进行测试,我将临时图像输出到照片库。现在我注意到,即使
我正在使用 AVFoundation 捕捉图像。我正在使用 AVCaptureVideoPreviewLayer 在屏幕上显示摄像头画面。此预览层的框架获取具有动态尺寸的 UIView 的边界: AV
我尝试构建一个从 iPhone 相机捕获帧并对这些帧进行一些处理的应用程序。我尝试了一些在互联网上找到的代码,例如这里:How to capture image without displaying
我正在尝试使用 AVFoundation 制作照片。当我将 obj-c 代码翻译成 swift 来执行此操作时,我的程序在运行我尝试查找视频连接的部分时卡住了。有什么线索吗? let captureS
使用jpegStillImageNSDataRepresentation:方法可以从AVCapureStillImageOutput获取NSData,然后我可以将数据写入文件。 NSData * im
我使用 AVFoundation 在 UIView 中捕获图像并向其添加注释。现在,我需要获取拍摄图像的地理位置。我当前的代码片段如下所示。元数据没有地理位置。也许我将不得不使用 CLLocation
我想捕获Mac的屏幕,并且我知道AVCaptureStillImageOutput可以工作。但我不知道如何在Mac中使用它。 我希望有人能给我一些有关使用该类捕获屏幕的示例代码。或者一些建议也可以。
我正在尝试使用我正在使用的应用程序发送照片,我已经让该应用程序拍照,然后当您点击发送时,它会发送您刚刚拍摄的照片以通过邮件发送。 但我不知道如何将 AVCaptureStillImageOutput
我是一名优秀的程序员,十分优秀!