나는 이것이 이전에 물어 보았다는 것을 안다. 나는이 질문에 대한 모든 답을 여기서 시도했다. 나는 그것에 대해 근본적으로 뭔가 있다고 생각한다. 지금까지 내 노력이 결실을 맺지 못함을 이해합니다. 나는 누군가가 나를이 고투에 대한 바보처럼 느끼게하고 올바른 방향으로 나를 가리킬 수 있기를 바라고 있습니다.AVFoundation Image Capture - 캡처 UIImage에서 사용자가 보는 것 정확히
내가하려는 것은 AVCaptureSession으로 사각형 UIImage를 캡처하여 비디오 레이어의 영역과 똑같이 보이는 축소판 이미지보기로 표시하는 것입니다. 이미지 캡처는 정상적으로 작동하지만 이미지가 축소판 이미지보기에 추가되면 이미지의 위쪽과 아래쪽이 확장되어 사용자가 볼 수있는 AvCaptureVideoPreviewLayer에없는 사진 영역을 표시합니다.
은 다음 코드는 모든 작품, 내 세션을 초기화한다하지만 어쩌면 내가 사용자에게 표시 공급의 부분 만 캡처하려면 여기를 변경해야하는 무언가가있다 :
이-(void)setupFeed
{
self.session = [[AVCaptureSession alloc] init];
self.session.sessionPreset = AVCaptureSessionPresetPhoto;
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
AVCaptureDeviceInput *deviceInput = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];
if([self.session canAddInput:deviceInput])
{
[self.session addInput:deviceInput];
}
self.cameraPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.session];
[self.cameraPreviewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
CALayer *rootLayer = [[self view] layer];
[rootLayer setMasksToBounds:YES];
CGRect frame = self.cameraPreview.frame;
[self.cameraPreviewLayer setFrame:frame];
[rootLayer insertSublayer:self.cameraPreviewLayer atIndex:0];
self.imageOutput = [[AVCaptureStillImageOutput alloc] init];
NSDictionary *outputSettings = [[NSDictionary alloc] initWithObjectsAndKeys:AVVideoCodecJPEG, AVVideoCodecKey, nil];
[self.imageOutput setOutputSettings:outputSettings];
[self.session addOutput:self.imageOutput];
[self.session startRunning];
}
코드의 다음 비트가이다 내 이미지를 캡처,이 코드는 따로 자르기, 작동 :
[self.imageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error)
{
if(imageDataSampleBuffer != NULL)
{
NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];
self.snappedImage = [UIImage imageWithData:imageData];
[self.snappedImage crop:self.snappedImageView.layer.frame];
[self.session stopRunning];;
}
dispatch_async(dispatch_get_main_queue(),
^{
[self presentSnappedImageOptions];
});
}];
}
-(void)presentSnappedImageOptions
{
[self.imagePreview setImage: self.snappedImage];
}
... 그리고 마지막으로 내가 보이는 비디오 레이어과 동일하게 이미지를 잘라을 시도 사용하고있어있는 UIImage 카테고리 방법 :
@implementation UIImage (Crop)
- (UIImage *)crop:(CGRect)rect
{
rect = CGRectMake(rect.origin.x*self.scale,
rect.origin.y*self.scale,
rect.size.width*self.scale,
rect.size.height*self.scale);
CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], rect);
UIImage *result = [UIImage imageWithCGImage:imageRef
scale:self.scale
orientation:self.imageOrientation];
CGImageRelease(imageRef);
return result;
}
@end
도움이 될 것입니다.
시도에 대해 어떻게
이 좀 도와 시간을내어 주셔서 감사합니다. 당신의 코드는 내가 필요로하는 GCRect를 주었고, 나는 원하는 결과를 얻기 위해 다른 자르기 방법을 사용해야 만했다. 같은 일로 고생하는 사람들을 위해 내가 사용한 자르기 방법은 - (UIImage *) croppIngimageByImageName : (UIImage *) imageToCrop toRect : (CGRect) rect, 여기 iPatel에서 게시 http://stackoverflow.com/questions/18205672/how - 투 - 작물 - 이미지 - 객관적 - c. –