Camera2, изображения сохраняются в галерее как пустые изображения с восклицательным знаком

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

private final ImageReader.OnImageAvailableListener mOnImageAvailableListener = new ImageReader.OnImageAvailableListener() {
    @Override
    public void onImageAvailable(ImageReader reader) {

      mBackgroundHandler.post(new ImageSaver(reader.acquireNextImage()));

    }
};

private class ImageSaver implements Runnable{

    private final Image mImage;

    public ImageSaver(Image image){
        mImage = image;
    }

    @Override
    public void run(){  

       ByteBuffer byteBuffer = mImage.getPlanes()[0].getBuffer();

       byte[] bytes= new byte[byteBuffer.remaining()]; 

       byteBuffer.get(bytes);  

       FileOutputStream fileOutputStream = null;

        try{
            fileOutputStream = new FileOutputStream(mImageFileName); 
            fileOutputStream.write(bytes); 
        }
        catch(IOException e){
            e.printStackTrace();
        }
        finally{  //finally cleans up the resources created in this runnable
            mImage.close();

            if (fileOutputStream !=null){
                try{
                    fileOutputStream.close();
                }
                catch(IOException e){
                    e.printStackTrace();
                }
            }
        }
    }
}

private void createImageFolder() {   
    File imageFile = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
    mImageFolder = new File(imageFile, "camera2VideoImage");   
    if (!mImageFolder.exists()) {   
        mImageFolder.mkdirs();
    } 
}


private File createImageFileName() throws IOException {  
    String timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date());
    String prepend = "IMAGE_" + timestamp + "_";
    File imageFile = File.createTempFile(prepend, ".jpg", mImageFolder);
    mImageFileName = imageFile.getAbsolutePath();  
    return imageFile;
}

Этот код должен работать, я не получаю ошибку в Log-cat. Я беру свои фотографии, но когда я смотрю на то, что сохранено в галерее, изображение появляется в виде серого экрана с белым окруженным восклицательным знаком. Что я сделал неправильно или не включен?

0 ответов

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