无法从图像文件创建位图

时间:2015-10-23 01:30:25

标签: android android-image android-bitmap

作为我程序的一部分,我需要显示属于文件夹的图像(JPG文件)。要做到这一点,我有这个代码:

private ArrayList<ImageGalleryItem> getData() {
    final ArrayList<ImageGalleryItem> imageItems = new ArrayList<>();
    try {
        Intent intent = getIntent();
        String imagesFolder = intent.getStringExtra("SourceFolder");
        String questionId = Integer.toString(intent.getIntExtra("QuestionId", 0));
        File file = new File(imagesFolder);
        if (file.exists() && file.isDirectory()) {
            File[] files = file.listFiles();
            for (File f : files) {
                try {
                    if (f.getName().startsWith(questionId + "_")) {
                        Bitmap bitmap = BitmapFactory.decodeFile(f.getPath());
                        imageItems.add(new ImageGalleryItem(bitmap, f.getName()));
                    }
                }
                catch (Exception e)
                {
                    Log.e("TDC@", e.getMessage());
                }
            }
        }
    }
    catch (Exception e)
    {
        Log.e("TDC@", e.getMessage());
    }

    return imageItems;
}

指令“BitmapFactory.decodeFile(f.getPath());”为所有文件创建位图文件,但为其中一个文件创建。当针对冲突文件达到该代码时,decodeFile会抛出异常,但更奇怪的是try catch块没有捕获异常。

使用F7进行调试时,BitmapFactory.java中抛出异常,在此代码中显示的throw中:

    try {
        bm = nativeDecodeByteArray(data, offset, length, opts);

        if (bm == null && opts != null && opts.inBitmap != null) {
            throw new IllegalArgumentException("Problem decoding into existing bitmap");
        }
        setDensityFromOptions(bm, opts);
    } finally {
        Trace.traceEnd(Trace.TRACE_TAG_GRAPHICS);
    }

所以问题是,为什么无法正确解码位图以及未捕获异常的原因。

如果我在移动文件管理器中浏览该文件,并打开该文件,则会正确显示,因此图像格式没有问题。此外,此图像是使用相机拍摄的,与正确解码的其他图像相同。

如何解决这个问题,还是有另一种方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我不知道为什么会这样。试试这个:

Bitmap bitmap = BitmapFactory.decodeStream(new FileInputStream(f));