簡體   English   中英

根據設備方向轉動相機圖片 (Xamarin.iOS)

[英]Turn camera picture depending on the device orientation (Xamarin.iOS)

我想制作一個 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);
     } 

試試這個:

var currentOrientation = UIApplication.SharedApplication.StatusBarOrientation;

if (currentOrientation == UIInterfaceOrientation.Portrait)
{
    videoConnection.VideoOrientation = AVCaptureVideoOrientation.Portrait;
}
else if (currentOrientation == UIInterfaceOrientation.LandscapeRight)
{
    videoConnection.VideoOrientation = AVCaptureVideoOrientation.LandscapeRight;
}
//xxx

更新:

如果應用程序僅支持方向或您鎖定屏幕,則還有另一種檢測設備方向的舊方法。 核心運動

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();
    });
}

參考這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM