Ich schreibe ein OpenCv Cordova Plugin für iOS. Ich brauchte die Kameravorschau, um Vollbild zu sehen und das Seitenverhältnis für alle iOS-Geräte (iPhone, iPads) beizubehalten.OpenCv iOS Kamera Vorschau einzelne Ausrichtung nur ohne Dehnen
Ich konnte Portrait-Modus (siehe Code) und es funktioniert perfekt auf iPhone 6/Plus, aber die Kameravorschau gestreckt leicht auf iPads möglicherweise aufgrund der Tatsache, dass AVCaptureSessionPresetHigh des unterstützte Auflösung 1280x720 erreichen ist. Hat jemand Ideen, wie man eine einzelne Ausrichtung (nur im Quer- oder Hochformat) erreichen und das Seitenverhältnis beibehalten kann?
Mein aktueller Code für eine Kamera beginnt, ist
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
// Initialize imageView to fullscreen
imageView = [[UIImageView alloc] initWithFrame:[UIScreen mainScreen].bounds];
[self.view addSubview:imageView];
[imageView setContentMode:UIViewContentModeScaleAspectFill];
[imageView setClipsToBounds:YES];
self.videoCamera = [[FixedCvVideoCamera alloc] initWithParentView:imageView];
self.videoCamera.delegate = self;
self.videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionBack;
self.videoCamera.defaultAVCaptureSessionPreset = AVCaptureSessionPresetHigh;
self.videoCamera.defaultAVCaptureVideoOrientation = AVCaptureVideoOrientationPortrait;
self.videoCamera.defaultFPS = 30;
[self.videoCamera start];
}
Hinweis Ich verwende FixedCvVideoCamera statt die OpenCV CvVideoCamera Klasse. Der Grund ist, dass ich CvVideoCameras layoutPreviewLayer Funktion Unterklasse und überschreiben, um Portrait-Modus zu behalten.
- (void)layoutPreviewLayer;
{
if (self.parentView != nil)
{
CALayer* layer = self->customPreviewLayer;
CGRect bounds = self->customPreviewLayer.bounds;
int rotation_angle = 0;
switch (defaultAVCaptureVideoOrientation) {
case AVCaptureVideoOrientationLandscapeRight:
rotation_angle = 270;
break;
case AVCaptureVideoOrientationPortraitUpsideDown:
rotation_angle = 180;
break;
case AVCaptureVideoOrientationLandscapeLeft:
rotation_angle = 90;
break;
case AVCaptureVideoOrientationPortrait:
default:
break;
}
layer.position = CGPointMake(self.parentView.frame.size.width/2., self.parentView.frame.size.height/2.);
layer.affineTransform = CGAffineTransformMakeRotation(DEGREES_RADIANS(rotation_angle));
layer.bounds = bounds;
}
}
Vielen Dank im Voraus.
Dank Kumpel. Ersparte mir Kopfschmerzen. – mylogon