Обработка 3.0 кетай камеры.Изображение не может быть сохранено - PullRequest
0 голосов
/ 07 июня 2018

Здравствуйте. Я использую Обработка 3.0 с Ketai Library , и я пытаюсь сохранить изображение, но по какой-то причине оно не работает.У каждой кнопки есть свой слушатель, чтобы определить, была ли она нажата.Камера открывается нормально, но при нажатии кнопки Сохранить ничего не происходит.сообщение об ошибке отображается в консоли обработки.Сообщение, отображаемое в консоли:

не удалось создать каталог для сохранения фотографии: / storage / emulated / 0 / Pictures / testing6

testing6 - это файл .pde, над которым я работаю.Кроме того, я тестирую приложение на эмуляторе Android, а не на устройстве Android.Я хочу иметь возможность сохранить изображение и создать папку, которая содержит изображения.Например, в одной папке будут фотографии животных, в другой - альбом и т.д. Создайте любое количество папок и фотографий.Я видел документацию по библиотеке Ketai и GitHub, но не смог найти решение.

import ketai.camera.*; 
import java.lang.String.*;  
KetaiCamera camera;



void setup()  
{
    camera = new KetaiCamera(this,width,height/2,15); 
    // 0: back camera; 1: front camera 
    camera.setCameraID(0); 
}  

void draw()  
{  
     image(camera, width/2, height/2, width, height);  
     drawUI();
}  

void drawUI()  
{  
     fill(255);
     stroke(0);
     orientation(LANDSCAPE);
     //here there is a for loop to create the buttons when the camera open
     //there are many buttons in other pages that is why we start from 28.
     for(int i = 28; i <= 31; i++)        
     {
         buttons[i].draw(color(0,128),textColor);
     }
} 

void onCameraPreviewEvent()  
{  
    camera.read(); 
} 

void onSavePhotoEvent(String filename)  
{  
    camera.addToMediaLibrary(filename);  
}  

//mousePressed is a build-in function and I check which button was pressed.
//each button has on click listener.
void mousePressed()  
{  
    if(buttons[28].isPressed())          //button Start, PAGE CAMERA 
    {
        if (camera.isStarted())
        {
            camera.stop();
        }
        else
        {
            if (!camera.start())
            {
                println("Failed to start camera.");
            }
        }
    }//end of if statement for the START button

    else if(buttons[29].isPressed())        //button Save, PAGE CAMERA
    {
        if(camera.isStarted())
        {
            camera.savePhoto("test.png");
        }
    }//end of else if for the SAVE button

    else if(buttons[30].isPressed())        //button Flash, PAGE CAMERA
    {
        if (camera.isFlashEnabled())
        {
            camera.disableFlash();
        }
        else
        {
            camera.enableFlash();
        }
    }//end of else if statement for the Flash button

    else if(buttons[31].isPressed())      //button Exit, PAGE CAMERA
    {
        camera.stop();
    }//end of else if statement for the Exit button

}//end of mousePressed function

1 Ответ

0 голосов
/ 10 декабря 2018

Более новые версии Android запрашивают у пользователя разрешение на доступ к конфиденциальным ресурсам во время выполнения, а не во время установки.Поэтому вам нужно попросить пользователя дать разрешение вашему приложению на запись в файловую систему: до вы вызываете KetaiCamera::savePhoto().

Из документации Обработка для Android :

void setup() {
  requestPermission("android.permission.WRITE_EXTERNAL_STORAGE", "checkPermission");
}

void checkPermission(boolean wasPermissionGranted){
    if (wasPermissionGranted)
        println("Hooray! I can now write to the local file system!");
    else 
        println("Oh no! I was not granted write permission =(");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...