gpt4 book ai didi

ios - UIImagePickerController 前置摄像头在预览 View 中显示镜像

转载 作者:行者123 更新时间:2023-11-29 10:28:59 31 4
gpt4 key购买 nike

我知道很多人问过这个问题,但我没有找到解决这个问题的正确答案,我的问题是:如何在预览 View 中制作照片(用户点击拍摄按钮后,然后然后转到预览 View 让用户预览)不是镜像,这个可能在 UIImagePickerController 中修复,我知道如何旋转照片,UIImageOrientation 枚举中的一些东西,比如 UIImageOrientationUp ,我知道这是什么意思。

尝试 1:

我在用户点击capture 按钮后获取照片,然后进入预览 View 并使用我有镜像的照片覆盖默认照片(使用cameraOverlayView ),我可以检测到用户点击 capture 按钮使用 NSNotificationCenter@"_UIImagePickerControllerUserDidCaptureItem",但我找不到获取照片的方法。

尝试 2:

我使用 cameraViewTransform,但是当用户在底部或顶部的 Home 按钮拍照(前置摄像头)时,预览 View 中的图像不是镜像,而是当左侧或右侧的 Home 按钮时,手机上的图像在用户点击capture 之前出现一些问题,尽管预览 View 中的图像不是镜像。使用 AVCaptureDeviceDidStartRunningNotification 通知。

- (void)cameraChanged:(NSNotification *)notification
{
if(self.imagePickerController.cameraDevice == UIImagePickerControllerCameraDeviceFront)
{
self.imagePickerController.cameraViewTransform = CGAffineTransformIdentity;
self.imagePickerController.cameraViewTransform = CGAffineTransformScale(self.imagePickerController.cameraViewTransform, -1, 1);
if (self.imagePickerController.cameraOverlayView) {
NSLog_DEBUG(@"self.imagePickerController.cameraOverlayView is not nil");
} else {
NSLog_DEBUG(@"self.imagePickerController.cameraOverlayView is nil");
}
self.imagePickerController.cameraOverlayView.transform = CGAffineTransformScale(self.imagePickerController.cameraViewTransform, -1, 1);
} else {
self.imagePickerController.cameraViewTransform = CGAffineTransformIdentity;
}
}

最佳答案

最后,我无法在 UIImagePickerController 中解决这个问题,但我使用 AVFoundationCoreMotion 解决了这个问题,你可以看到 AVCam

//init the motionManager
- (void)initializeMotionManager{
motionManager = [[CMMotionManager alloc] init];
motionManager.accelerometerUpdateInterval = .1;
motionManager.gyroUpdateInterval = .1;

[motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue]
withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
if (!error) {
[self outputAccelertionData:accelerometerData.acceleration];
}
else{
NSLog_DEBUG(@"%@", error);
}
}];
}

//detect the device orientation
- (void)outputAccelertionData:(CMAcceleration)acceleration{

if (acceleration.x >= 0.75) {
_orientationNew = UIInterfaceOrientationLandscapeLeft;
}
else if (acceleration.x <= -0.75) {
_orientationNew = UIInterfaceOrientationLandscapeRight;
}
else if (acceleration.y <= -0.75) {
_orientationNew = UIInterfaceOrientationPortrait;
}
else if (acceleration.y >= 0.75) {
_orientationNew = UIInterfaceOrientationPortraitUpsideDown;
}
else {
// Consider same as last time
return;
}

if (_orientationNew == _orientationLast)
return;

_orientationLast = _orientationNew;
}

关于ios - UIImagePickerController 前置摄像头在预览 View 中显示镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30644408/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com