处理3.0科泰相机。图片无法保存

Posted

技术标签:

【中文标题】处理3.0科泰相机。图片无法保存【英文标题】:Processing 3.0 ketai camera. Image cannot be saved 【发布时间】:2018-11-16 17:33:31 【问题描述】:

您好,我正在使用 processing 3.0ketai 库,我正在尝试保存图像,但由于某种原因它不起作用。每个按钮都有自己的侦听器,以识别它是否被按下。相机正常打开,但按下保存按钮时没有任何反应。处理控制台中会显示一条错误消息。控制台中显示的消息是:

创建保存照片的目录失败:/storage/emulated/0/Pictures/testing6

testing6 是我正在处理的 .pde 文件。另外,我正在安卓模拟器上测试应用程序,而不是在安卓设备上。我希望能够保存图像并创建一个包含图像的文件夹。例如,一个文件夹将有动物照片,另一个文件夹将有风景等。创建任意数量的文件夹和照片。我在 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】:

较新版本的 android 会在运行时而不是在安装期间要求用户授予访问敏感资源的权限。因此,您需要在调用KetaiCamera::savePhoto() 之前提示用户授予您的应用写入文件系统的权限。

来自Processing for Android documentation:

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 =(");

【讨论】:

以上是关于处理3.0科泰相机。图片无法保存的主要内容,如果未能解决你的问题,请参考以下文章

Android webview调取安卓原生相机和相册上传图片

初学视觉学习笔记----保存并显示图片(打开两个相机)

cvCreateCameraCapture 无法访问 OpenCV 3.0 相机

将相机图像上传到 Firebase

H5调用本地相册/相机上传图片

将照片从相机保存到安卓内部存储