根据设备方向转动相机图片 (Xamarin.iOS)
Posted
技术标签:
【中文标题】根据设备方向转动相机图片 (Xamarin.iOS)【英文标题】:Turn camera picture depending on the device orientation (Xamarin.iOS) 【发布时间】:2017-10-26 09:04:09 【问题描述】:我想制作一个 Xamarin.ios 应用程序,我可以在其中像相机一样捕捉图片...我的应用程序仅支持纵向。
如果我在拍摄照片时相机是横向的,我想将拍摄的照片变成纵向。
有人知道我该怎么做吗?
代码
public async void CapturePhoto()
var videoConnection = stillImageOutput.ConnectionFromMediaType(AVMediaType.Video);
var sampleBuffer = await stillImageOutput.CaptureStillImageTaskAsync(videoConnection);
var jpegImageAsBytes = AVCaptureStillImageOutput.JpegStillToNSData(sampleBuffer).ToArray();
string base64StringImage = Convert.ToBase64String(jpegImageAsBytes);
FaceRecognition faceRecognition = new FaceRecognition();
int result = faceRecognition.SendPhoto(base64StringImage);
【问题讨论】:
@ColeXia 但是我怎么知道设备是 LandscapeLeft,可能它也可能是 Portrait 或 LandscapeRight... 【参考方案1】:试试这个:
var currentOrientation = UIApplication.SharedApplication.StatusBarOrientation;
if (currentOrientation == UIInterfaceOrientation.Portrait)
videoConnection.VideoOrientation = AVCaptureVideoOrientation.Portrait;
else if (currentOrientation == UIInterfaceOrientation.LandscapeRight)
videoConnection.VideoOrientation = AVCaptureVideoOrientation.LandscapeRight;
//xxx
更新:
如果应用仅支持方向或您锁定屏幕,则还有另一种检测设备方向的旧方法。 Core Motion
public void LockOrientation()
CMMotionManager CMManager = new CMMotionManager();
CMManager.DeviceMotionUpdateInterval = 0.2f;
CMManager.StartDeviceMotionUpdates(NSOperationQueue.MainQueue, (motion, error) =>
if (Math.Abs(motion.Gravity.X) > Math.Abs(motion.Gravity.Y))
Console.WriteLine("Lan");
if (motion.Gravity.X > 0)
UIDevice.CurrentDevice.SetValueForKey(new NSNumber((int)UIInterfaceOrientation.LandscapeLeft), new NSString("orientation"));
Console.WriteLine("Left");
else
UIDevice.CurrentDevice.SetValueForKey(new NSNumber((int)UIInterfaceOrientation.LandscapeRight), new NSString("orientation"));
Console.WriteLine("Right");
else
if (motion.Gravity.Y >= 0)
Console.WriteLine("Down");
else
Console.WriteLine("UP");
CMManager.StopDeviceMotionUpdates();
);
参考here
【讨论】:
我解决了这个问题...我不得不用 videoConnection 替换 stillImageOutput。感谢您的帮助 但是还有一个问题,当我只允许纵向布局时,状态栏总是在顶部并且它不会工作......你有其他想法而不是状态栏的方向吗?跨度> forums.developer.apple.com/thread/62004,如果有帮助请告诉我。@Dominic 这看起来不错,但它告诉我要迟到的方向......(一切都已经完成之后) 所以它现在可以工作了...我只需要您的部分代码而不是全部...谢谢您的帮助以上是关于根据设备方向转动相机图片 (Xamarin.iOS)的主要内容,如果未能解决你的问题,请参考以下文章
UIButton 在相机流中不可见 (Xamarin.iOS)
三星 Galaxy S3、S4、S5 的 Android 相机/图片方向问题
web获取照片EXIF信息(例如:拍照方向相机设备型号拍摄时间ISO 感光度GPS 地理位置等数据)