使用BitmapFactory - SkImageDecoder检索图像返回null错误



我试图检索的图像,我(认为)我已经保存使用一个surfaceview在一个片段(噩梦)在Android。这里我尝试保存一个图像并列出目录中的所有图像。我完全不知道目录在哪里(storage/emululated/0等)。除了像这样列出它们,我在任何地方都找不到这些图像。也就是说它们可能存在?

jpegCallback = new Camera.PictureCallback() {
    public void onPictureTaken(byte[] data, Camera camera) {

        // Create an image file name
        File image = null;
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        String imageFileName = "JPEG_" + timeStamp + "_";
        File storageDir = Environment.getExternalStoragePublicDirectory(
                Environment.DIRECTORY_PICTURES);
        try {
            image = File.createTempFile(
                    imageFileName,  /* prefix */
                    ".jpg",         /* suffix */
                    storageDir      /* directory */
            );
        } catch (IOException e) {
            e.printStackTrace();
        }
        String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString();
        Log.d("Files", "Path: " + path);
        File f = new File(path);
        File file[] = f.listFiles();
        Log.d("Files", "Size: "+ file.length);
        String filename = "";
        for (int i=0; i < file.length; i++)
        {
            Log.d("Files", "FileName "+i+" :" + file[i].getName());
            filename = file[i].getName();
        }
        Bitmap myBitmap = BitmapFactory.decodeFile(file[0].getAbsolutePath()+"/"+filename);
        ImageView taken_pic = (ImageView) view.findViewById(R.id.taken_pic);
        taken_pic.setImageBitmap(myBitmap);
    }
};

这只是给我一个图像名称列表和一个'SkImageDecoder::Factory返回null'消息。我可能用文件名字符串把事情弄得更糟,但即使在回显的列表中的一个文件中硬编码,我也会得到相同的结果。基于这段代码的结果,图像是否应该存在?我怎么才能把图像变成位图呢?有更好的方法吗?我已经试过了我能找到的每一个例子,阅读了每一个主题。

这是我现在工作的一个按钮的例子,它将与surfaceview一起工作,surfaceview显示相机正确保存图像(当前到下载文件夹),检索它并输出到imageview(当前为"taken_pic")。

不确定我到底哪里错了。我想只是在几个小地方。一个大问题是调试它的困难。我的手机没有根,所以我想我在Android Studios Device Monitor上的选择很有限。通过PC浏览器浏览时,通常不会看到已保存的图像。拔掉USB,重新启动手机,文件应该出现在它们应该在的地方。

我希望这可能对某人有帮助。

        camera_picture.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View v) {
                captureImage();
            }
        });
        private void captureImage() {
            cam.takePicture(shutterCallback, rawCallback, jpegCallback);
        }
        rawCallback = new Camera.PictureCallback() {
            public void onPictureTaken(byte[] data, Camera camera) {
                Log.d("Log", "onPictureTaken - raw");
            }
        };
        /** Handles data for jpeg picture */
        shutterCallback = new Camera.ShutterCallback() {
            public void onShutter() {
                Log.i("Log", "onShutter'd");
            }
        };
        jpegCallback = new Camera.PictureCallback() {
            public void onPictureTaken(byte[] data, Camera camera) {
                FileOutputStream outStream = null;
                try {
                    File fileb = new     File(android.os.Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "imagename2.jpg");
                    outStream = new FileOutputStream(fileb);
                    outStream.write(data);
                    outStream.close();
                    Log.d("Log", "onPictureTaken - wrote bytes: " + data.length);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
            }
            Log.d("Log", "onPictureTaken - jpeg");

            String photoPath = android.os.Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)+"/imagename.jpg";
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inPreferredConfig = Bitmap.Config.ARGB_8888;
            Bitmap bitmap = BitmapFactory.decodeFile(photoPath, options);
            ImageView taken_pic = (ImageView) view.findViewById(R.id.taken_pic);
            taken_pic.setImageBitmap(bitmap);
        }

最新更新