【问题标题】:Bitmap cannot be created from an image file无法从图像文件创建位图
【发布时间】:2015-10-23 10:00:38
【问题描述】:

作为我程序的一部分,我需要显示属于某个文件夹的图像(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);
    }

所以问题是,为什么无法正确解码位图以及为什么没有捕获异常。

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

如何解决这个问题,或者,有没有其他方法可以做到这一点?

【问题讨论】:

  • 如果异常已被捕获,则无法在您的代码中捕获该异常。第一个捕获它:docs.oracle.com/javase/tutorial/essential/exceptions/… 无论如何,android 代码已经在处理该错误,并且该错误与“问题解码为现有位图”有关。所以你提供了一个非法的论点。不知何故,该文件是不同的。删除有问题的图像,看看它是否完成。如果完成,请查看有问题的图片,看看有什么不同,重新保存,等等。

标签: android android-image android-bitmap


【解决方案1】:

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

位图位图 = BitmapFactory.decodeStream(new FileInputStream(f));

【讨论】:

  • 它也不起作用,但是我已经删除了有问题的图像并且问题不再重复
猜你喜欢
  • 2021-11-22
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
相关资源
最近更新 更多