【发布时间】:2015-07-28 14:24:20
【问题描述】:
我正在尝试让简单的decodeFile 工作,但我正在失去理智。
下面的代码返回null,而logcat 说:D/skia﹕ --- decoder->decode returned false
Aldo 有时会成功(50 次中有一个)。
try {
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inDither = true;
opt.inPreferredConfig = Bitmap.Config.ARGB_8888;
canvasBitmap = BitmapFactory.decodeFile(myFile.getAbsolutePath(), opt);
} catch (OutOfMemoryError e) {
Log.d(TAG, "Trace: " + e);
System.gc();
try {
Log.d(TAG, "Trying again");
canvasBitmap = BitmapFactory.decodeFile(myFile.getAbsolutePath());
} catch (OutOfMemoryError e2) {
Log.d(TAG, "Trace: " + e2);
Log.d(TAG, "Out of memory!!!!!!!");
}
}
文件已定义,getAbsolutePath 返回/storage/emulated/0/Pictures/Screenshots/Screenshot_2015-07-28-16-18-56.png
文件基本上是在手机上截取的屏幕截图,可以在图库应用和电脑上正常打开,因此它没有损坏。
如果由于某种原因这不起作用,是否有任何带有自己解码器的自定义库?我尝试了几个库,但它们似乎都使用相同的 decodeFile。
我在 nexus 4 上进行测试,所以图像是 760p。
【问题讨论】:
-
该代码中没有返回任何内容。那么什么是假的呢?
-
Log.d(TAG, "Trace: " + e);。那甚至不会编译。 -
@greenapps 需要从文件中设置位图,Log标签在我这边编译,检查导入。
-
确实可以编译我现在看到的。但是你会想在那里使用
e2而不是e。但是您的代码中没有任何内容返回错误。请解释。 BitmapFactory.decodeFile 将返回 Bitmap 或 null。但绝不是假的。 -
@greenapps 好的,我知道它应该返回“null”,但是“false”返回是从 logcat 复制的,所以它确实返回“false”。我在互联网上看到返回 false 的唯一原因是 CMYK 色彩空间,但我的屏幕截图不能是 CMYK
标签: android decode bitmapfactory