2013-11-25 4 views
0

Я застрял в проблеме, и я понятия не имею, что попробовать дальше.Blackberry webworks 10, используя изображение с изображения взято загружено

В моем приложении я предлагаю пользователю выбрать либо фотографию, либо выбрать фотографию из галереи. Эта часть работает отлично, проблема возникает с сохранением \ чтением фотографии. Возьмем это с точки зрения камеры.

function startCameraApp() { 
    PhotoTaken = false; 
    blackberry.event.addEventListener("onChildCardClosed", sharePhoto); 

    blackberry.invoke.invoke({ 
     target: "sys.camera.card" 
    }, onInvokeSuccess, onInvokeError); 
} 

и в sharePhoto я следующий код ...

function sharePhoto(request) { 
    var image = new Image(); 
    image.src = "file://" + request.data; 
    image.onload = function() { 
     // Now here I need to read the image file and convert it into base64. 
     var resized = resizeMe(image); // the resizeMe function is given below and it simply makes my image smaller 
     var imagedata = resized.split("base64,"); 
     sessionStorage.setItem("MyNewPicture", imagedata); 
    } 
} 





function resizeMe(img) { 

    var canvas = document.createElement('canvas'); 
    var max_width = 600; 
    var max_height = 600; 
    var width = img.width; 
    var height = img.height; 

    // calculate the width and height, constraining the proportions 
    if (width > height) { 
     if (width > max_width) { 
      height = Math.round(height * max_width/width); 
      width = max_width; 
     } 
    } else { 
     if (height > max_height) { 
      width = Math.round(width * max_height/height); 
      height = max_height; 
     } 
    } 

    //resize the canvas and draw the image data into it 
    img.width = width; 
    img.height = height; 
    canvas.width = width; 
    canvas.height = height; 
    canvas.classname += "ui-hidden"; 
    var ctx = canvas.getContext("2d"); 
    ctx.drawImage(img, 0, 0, width, height); 
    return canvas.toDataURL(); 
} 

Так пробеги приложение и принимает фотографии и все, кажется, хорошо, но данные, загруженные в локальное хранилище просто пустой экран. Он работает на 100% в симуляторе Blackberry 10, но не на моем устройстве. На устройстве сохраняется пустая строка.

Редактировать

Ok. Поэтому я добавил это к моей функции для тестирования и я до сих пор застрял, и я не знаю, что делать ...

function sharePhoto(request) { 
    var image = new Image(); 
    image.src = "file://" + request.data; 
    image.onload = function() { 
     // Now here I need to read the image file and convert it into base64. 
     var resized = resizeMe(image); // the resizeMe function is given below and it  simply makes my image smaller 
     var imagedata = resized.split("base64,"); 

     alert(imagedata); // This returns a blank popup 

     sessionStorage.setItem("MyNewPicture", imagedata); 
    } 
} 

ответ

1

Я считаю, что при использовании метода разделения он возвращает массив, так что вы» доступ d это так:

var resized = resizeMe(image); 
var imagedata = resized.split("base64,"); 
    imagedata = imagedata[1]; // this gives you everything after the 'base64,' string 

Однако, главная проблема, которую я вижу, что вы разделив ImageData строку, которая удаляет все «это изображение» префикс из данных.

При отображении ImageData как изображение, вы должны иметь данные: изображение/JPEG; base64, префикс, а также.

Так что, как говорится, ваш источник изображения будет

data:image/jpeg;base64,<rest of base64 string here> 
+0

split действительно возвращает массив. Однако это не было причиной моей проблемы. Я использовал base64, l как split, так что я могу легко получить строку base64. Вы можете увидеть мой ответ ниже о том, что вызвало мою проблему. Спасибо за ваш ответ. – KapteinMarshall

0

мне нужно, чтобы включить дополнительный элемент в config.xml моего приложения.

<access subdomains="true" uri="file://accounts/"></access> 
<access subdomains="true" uri="file://accounts/100/shared/camera/"></access> 

Это дает доступ к вашему приложению в эти папки и их файлы сложения. Симулятор не требует этого разрешения.