Tôi đang sử dụng các lớp AVFoundation để triển khai máy ảnh tùy chỉnh trong ứng dụng của mình. Tôi chỉ đang chụp ảnh tĩnh chứ không phải video. Tôi có tất cả mọi thứ làm việc nhưng tôi bị mắc kẹt bởi một cái gì đó. Tôi xem xét hướng thiết bị khi chụp ảnh tĩnh và đặt videoOrientation của kết nối video một cách thích hợp. Đoạn mã:Tại sao chế độ phong cảnh AVCaptureVideoOrientation dẫn đến hình ảnh tĩnh lộn ngược?
// set the videoOrientation based on the device orientation to
// ensure the pic is right side up for all orientations
AVCaptureVideoOrientation videoOrientation;
switch ([UIDevice currentDevice].orientation) {
case UIDeviceOrientationLandscapeLeft:
// Not clear why but the landscape orientations are reversed
// if I use AVCaptureVideoOrientationLandscapeLeft here the pic ends up upside down
videoOrientation = AVCaptureVideoOrientationLandscapeRight;
break;
case UIDeviceOrientationLandscapeRight:
// Not clear why but the landscape orientations are reversed
// if I use AVCaptureVideoOrientationLandscapeRight here the pic ends up upside down
videoOrientation = AVCaptureVideoOrientationLandscapeLeft;
break;
case UIDeviceOrientationPortraitUpsideDown:
videoOrientation = AVCaptureVideoOrientationPortraitUpsideDown;
break;
default:
videoOrientation = AVCaptureVideoOrientationPortrait;
break;
}
videoConnection.videoOrientation = videoOrientation;
Lưu ý nhận xét của tôi trong trường hợp ngang. Tôi phải đảo ngược bản đồ định hướng hoặc hình ảnh kết quả bị lộn ngược. Tôi chụp và lưu hình ảnh với mã sau:
[self.stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection
completionHandler:^(CMSampleBufferRef imageSampleBuffer, NSError *error)
{
NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer];
self.stillImage = [UIImage imageWithData:imageData];
// notify observers (image gets saved to the camera roll)
[[NSNotificationCenter defaultCenter] postNotificationName:CaptureSessionManagerDidCaptureStillImageNotification object:self];
self.stillImage = nil;
}];
Không có xử lý hoặc thao tác hình ảnh khác.
Ứng dụng của tôi hoạt động với mã ở trên. Tôi chỉ cố gắng hiểu tại sao hằng số định hướng phải được đảo ngược để định hướng phong cảnh. Cảm ơn!
Không sử dụng định hướng UIDevice khi bạn thực sự muốn sử dụng Định hướng UII. – Till
Bạn không thể sử dụng định hướng 'UIInterface' trong trường hợp này. Hướng thiết bị tại thời điểm chụp ảnh luôn chính xác. định hướng hình ảnh của 'stillImage' sau khi dữ liệu đó được chụp là không chính xác. Tôi đã có thể giải quyết vấn đề bằng cách sử dụng UIDeviceOrientation và dịch sang UIImageOrientation thích hợp khi quay. Vào thời điểm đó, không ai đang nhét vào đây nên tôi không đăng mã. Nếu tôi có thời gian tôi sẽ thêm mã. – XJones
@XJones, vui lòng cập nhật câu trả lời của bạn với giải pháp chính xác. – Hemang