Функциональность камеры iPhone 5 в PhoneGap, изображение сжато

Итак, у меня было приложение для iOS до iOS6/iPhone5. Это сработало хорошо. В настоящее время я пытаюсь исправить это для iPhone5 и ios6. Все шло хорошо, и я устранил 99% ошибок для ios6, и, похоже, это работает. Однако iPhone 5 ведет себя темпераментно.

Я использую PhoneGap 1.8.1. В какой-то момент я делаю снимок камерой, используя эту функцию:

function capturePhoto() {

        networkState = navigator.network.connection.type; 

            if (networkState == Connection.NONE)
                {
                  alert('You must be connected to the internet to use this feature!');

                }else{


                var options = {
                    quality: 100,
                    correctOrientation: false,
                    destinationType : navigator.camera.DestinationType.FILE_URI,
                    sourceType: navigator.camera.PictureSourceType.CAMERA,
                    encodingType: navigator.camera.EncodingType.JPEG,
              }
          navigator.camera.getPicture(onPhotoDataSuccess, onFail, options);

    }
}

Затем я отображаю изображение в качестве фона на холсте HTML. Используя кинетический JS, но для решения этой проблемы я думаю, что все, что вам нужно знать, это:

var canvaswidth = window.innerWidth;
var canvasheight = window.innerHeight;

var darthVaderImg = new Kinetic.Image({
                                          x: 0,
                                          y: 0,
                                          image: images.darthVader,
                                          width: canvaswidth,
                                          height: canvasheight,
                                          name: "image"
                                          });

Это работает на iphone 4s ios 6, работает нормально, на android работает нормально... а на iPhone 5 - нет. Изображение имеет правильную ориентацию, но оно сжимается в верхней части, я попытался жестко запрограммировать его на размер экрана iPhone 5 .... который, как я полагаю, составляет 640x1136?

Все еще не повезло, если я преувеличиваю и устанавливаю высоту изображения, например, 2000, оно действительно закрывает экран, но увеличивается. Я немного потерялся в том, что происходит .... у кого-то была похожая проблема или какие-либо идеи ?


person Bohdi    schedule 02.10.2012    source источник


Ответы (1)


Итак, я думаю, что понял это:

Первое, что нужно понять, это то, что iPhone 5 делает снимки точно такого же размера, как и iPhone 4S. Я только что проверил и подтвердил это. Так что дополнительный размер экрана не имеет значения.

Однажды я понял это, воспользовавшись статьей, написанной Саймоном Макдональдом. Доступно здесь:

http://simonmacdonald.blogspot.co.uk/2012/07/change-to-camera-code-in-phonegap-190.html

Затем я добавил эти две строки в свою функцию CapturePhoto:

targetWidth: 320,
targetHeight: 480,

Это гарантировало, что снятое изображение было правильного размера, а дополнительным преимуществом было то, что оно было правильным на 4 и 5.

Затем я убедился, что он отображается на холсте в правильном размере, мой размер отображения холста стал следующим:

var canvaswidth = 320;
var canvasheight = 480;

var darthVaderImg = new Kinetic.Image({
                                          x: 0,
                                          y: 0,
                                          image: images.darthVader,
                                          width: canvaswidth,
                                          height: canvasheight,
                                          name: "image"
                                          });

Это держит изображение в пропорции, перфекционист во мне говорит, что это правильно только на 99%, но оно покрывает холст и не выходит за рамки пропорций.

Это оставляет мне лишнее «пространство» на iPhone 5, но я просто боролся с этим с помощью оператора IF, определяя высоту окна:

window.innerHeight

используя это как переменную, я могу отличить iphone5 от iphone4/4s, а затем я могу установить разные правила для обоих, что касается действий отображения.

Надеюсь, это поможет любому, кто сталкивается с той же проблемой.

person Bohdi    schedule 02.10.2012