从SurfaceView保存图像并以片段形式显示在imageview中

时间:2014-07-13 11:58:18

标签: android imageview fragment surfaceview

我在运行相机的片段中有一个表面视图。我可以用它开始/停止/拍照,但我永远无法成功检索图像。

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);
            for (int i=0; i < file.length; i++)
            {
                Log.d("Files", "FileName "+i+" :" + file[i].getName());
            }

            Bitmap myBitmap = BitmapFactory.decodeFile(file[0].getAbsolutePath());

            ImageView taken_pic = (ImageView) view.findViewById(R.id.taken_pic);
            taken_pic.setImageBitmap(myBitmap);

        }
};

日志看起来像这样。即使在我重新启动应用程序进行更改之后,图像也堆积起来,所以我认为它们正在保存(不是我能看到它们,除非我做这样的事情)。

我还没有包含任何XML,因为问题是检索图像而不是显示图像。我该怎么做才能正确检索这些图像。还有一种方法/可靠程序可以从PC资源管理器或其他东西查看这些图像吗?非常感谢。

Path: /storage/emulated/0/Pictures
D/Files﹕ Size: 8
D/Files﹕ FileName 0 :cache
D/Files﹕ FileName 1 :Screenshots
D/Files﹕ FileName 2 :JPEG_20140713_121953_-1379701757.jpg
D/Files﹕ FileName 3 :JPEG_20140713_122054_-1379701757.jpg
D/Files﹕ FileName 4 :JPEG_20140713_123411_-1379701757.jpg
D/Files﹕ FileName 5 :JPEG_20140713_123722_-1379701757.jpg
D/Files﹕ FileName 6 :JPEG_20140713_123833_-1379701757.jpg
D/Files﹕ FileName 7 :JPEG_20140713_124125_-1379701757.jpg
E/BitmapFactory﹕ Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/Pictures/cache: open failed: EISDIR (Is a directory)

1 个答案:

答案 0 :(得分:0)

Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/Pictures/cache: open failed: EISDIR (Is a directory)

看起来你传递的是目录名,而不是文件名。从输出中可以看出,列表中的第一个文件称为“缓存”;如果你看一下磁盘,你可能会发现它是一个目录。

您应该仅限于名称以“.jpg”结尾的文件。执行此操作的一种方法是this code,它使用简单的正则表达式使用File.list(FilenameFilter)将glob模式应用于检索到的文件列表。所以你打电话给MiscUtils.getFiles(path, "*.jpg")

当然,如果有一个名为“foo.jpg”的目录,它也会找到它。您可以使用File.isFile()进行测试来消除这些问题。