Как определить соотношение сторон камеры в Windows Phone

Я хотел бы иметь возможность определить соотношение сторон аппаратной камеры Windows Phone 8. Из того, что я понимаю, сейчас есть три размера экрана устройства, поэтому я не уверен, влияет ли это на соотношение сторон камеры устройства или они являются стандартными для всех моделей телефонов? Причина, по которой мне нужно определить соотношение сторон камеры, заключается в том, чтобы иметь возможность соответствующим образом изменять размер изображения после съемки. Изображения по умолчанию с использованием CameraCaptureTask для моих целей очень велики. С использованием CameraCaptureTask в моем приложении все, что я получаю обратно - это поток данных изображения. Исходя из этого, я пытался вручную определить соотношение сторон, хотя при тестировании на Nokia 920 с соотношением сторон 16:9 по умолчанию определенное соотношение не имеет смысла, оно равно 222:125. Что я делаю так:

MainPage.xaml.cs

public int GCD(int a, int b)
    {
        while (a != 0 && b != 0)
        {
            if (a > b)
                a %= b;
            else
                b %= a;
        }
        if (a == 0)
            return b;
        else
            return a;
    }

private void cameraTask_Completed(object sender, PhotoResult e)
    {
        if (e.TaskResult == TaskResult.OK)
        {
            BitmapImage bmi = new BitmapImage();
            bmi.SetSource(e.ChosenPhoto);
            //MessageBox.Show(bmi.PixelWidth.ToString() + "x" + bmi.PixelHeight.ToString());

            var gcd = GCD(bmi.PixelWidth, bmi.PixelHeight);
            var result = string.Format("{0}:{1}", bmi.PixelWidth / gcd, bmi.PixelHeight / gcd);

            WriteableBitmap wb = new WriteableBitmap(bmi);
            //WriteableBitmap wb;
            Stream stream = new MemoryStream();

            switch (result)
            {
                case "3:4":
                    //wb = new WriteableBitmap(480, 640);
                    //wb.SetSource(e.ChosenPhoto); 
                    wb.SaveJpeg(stream, 480, 640, 0, 100);
                    break;
                case "4:3":
                    //wb = new WriteableBitmap(640, 480);
                    wb.SaveJpeg(stream, 640, 480, 0, 100);
                    break;
                case "9:16":
                    //wb = new WriteableBitmap(448, 800);
                    wb.SaveJpeg(stream, 448, 800, 0, 100);
                    break;
                case "16:9":
                    //wb = new WriteableBitmap(800, 448);
                    wb.SaveJpeg(stream, 800, 448, 0, 100);
                    break;
                default:
                    wb = null;
                    return;
            }

            stream.Seek(0, SeekOrigin.Begin);
            //stream.Dispose();

            var capturedPicture = new CapturedPicture(e.OriginalFileName, stream);
        }
    }

Мои результаты пока таковы. В зависимости от ориентации устройства при съемке, соотношение сторон

Соотношение сторон 16:9 отображается как 2000x3552 = 125:222 3552x2000 = 222:125 4:3 отображается как 2448x3264 = 3:4 3264x2448 = 4:3

0 ответов

Другие вопросы по тегам