iOS用のOpenCv Cordovaプラグインを作成しています。私はカメラのプレビューがフルスクリーンで、すべてのiOSデバイス(iPhone、iPad)のアスペクト比を維持する必要がありました。OpenCv iOSカメラプレビューストレッチなしの単方向のみ
私はポートレートモードを達成することができました(コードを参照)、それはiPhone 6に完璧に動作します/プラスが、カメラのプレビューは、おそらくAVCaptureSessionPresetHighのサポート解像度が1280×720であるという事実にiPadの上で少し伸ばしています。誰でも単一の方向(縦または横のみ)を達成し、縦横比を維持する方法に関するアイデアはありますか?カメラを起動するための
私の現在のコードは、私がFixedCvVideoCameraの代わりに、OpenCVのCvVideoCameraクラスを使用してい
- (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];
}
お知らせです。その理由は、CvVideoCameraのlayoutPreviewLayerのポートレートモードを維持する機能をサブクラス化してオーバーライドするためです。
- (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;
}
}
ありがとうございます。
おかげでバディ。私に頭痛を救った。 – mylogon