【发布时间】:2011-12-09 14:21:13
【问题描述】:
我正在尝试从资产中获取图像(由于大量图片,资产不可绘制以具有子文件夹)并希望以 ACTION_VIEW 意图打开它。由于我不知道任何其他方式,我试图将图像作为位图,保存为 jpg 文件缓存,在关闭时打开并删除。 (还有其他方法吗?)
不幸的是,它保存了一个文件,但它是损坏的图像文件,模拟器打开黑色图像,手机显示错误图像,计算机说图像文件已损坏。我的代码有什么不好的地方吗?
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
AssetManager mngr = getAssets();
try {
InputStream is2 = mngr.open(type+"/"+type+""+mRowId+".jpg");
Bitmap bitmap = BitmapFactory.decodeStream(is2);
image.setImageBitmap(bitmap);
OutputStream outStream = null;
File file = new File(ShowActivity.this.getCacheDir(), type+""+mRowId+".jpg");
outStream = new FileOutputStream(file);
boolean compressed = bitmap.compress(Bitmap.CompressFormat.JPEG, 80, outStream);
outStream.flush();
outStream.close();
} catch (final IOException e) {
e.printStackTrace();
}
String patht = ShowActivity.this.getCacheDir().getName() + File.separatorChar+type+""+mRowId+".jpg";
intent.setDataAndType(Uri.fromFile(new File(patht)), "image/jpg");
startActivity(intent);
编辑:
似乎代码正在运行,但我在 logcat 中收到以下错误:
12-09 15:17:02.568: INFO/ActivityManager(61): Starting: Intent {
act=android.intent.action.VIEW dat=file:///cache/12.jpg typ=image/jpeg cmp=com.android.gallery/com.android.camera.ViewImage } from pid 378
12-09 15:17:02.728: ERROR/UriImage(389): got exception decoding bitmap
12-09 15:17:02.728: ERROR/UriImage(389): java.lang.NullPointerException
12-09 15:17:02.728: ERROR/UriImage(389): at com.android.camera.Util.makeInputStream(Util.java:336)
12-09 15:17:02.728: ERROR/UriImage(389): at com.android.camera.Util.makeBitmap(Util.java:307)
12-09 15:17:02.728: ERROR/UriImage(389): at com.android.camera.Util.makeBitmap(Util.java:299)
12-09 15:17:02.728: ERROR/UriImage(389): at com.android.camera.gallery.UriImage.fullSizeBitmap(UriImage.java:94)
12-09 15:17:02.728: ERROR/UriImage(389): at com.android.camera.gallery.UriImage.fullSizeBitmap(UriImage.java:86)
12-09 15:17:02.728: ERROR/UriImage(389): at com.android.camera.gallery.UriImage.thumbBitmap(UriImage.java:120)
12-09 15:17:02.728: ERROR/UriImage(389): at com.android.camera.ImageGetter$ImageGetterRunnable.executeRequest(ImageGetter.java:173)
12-09 15:17:02.728: ERROR/UriImage(389): at com.android.camera.ImageGetter$ImageGetterRunnable.run(ImageGetter.java:149)
12-09 15:17:02.728: ERROR/UriImage(389): at java.lang.Thread.run(Thread.java:1019)
12-09 15:17:02.728: ERROR/UriImage(389): got exception decoding bitmap
12-09 15:17:02.728: ERROR/UriImage(389): java.lang.NullPointerException
12-09 15:17:02.728: ERROR/UriImage(389): at com.android.camera.Util.makeInputStream(Util.java:336)
12-09 15:17:02.728: ERROR/UriImage(389): at com.android.camera.Util.makeBitmap(Util.java:307)
12-09 15:17:02.728: ERROR/UriImage(389): at com.android.camera.Util.makeBitmap(Util.java:299)
12-09 15:17:02.728: ERROR/UriImage(389): at com.android.camera.gallery.UriImage.fullSizeBitmap(UriImage.java:94)
12-09 15:17:02.728: ERROR/UriImage(389): at com.android.camera.ImageGetter$ImageGetterRunnable.executeRequest(ImageGetter.java:204)
12-09 15:17:02.728: ERROR/UriImage(389): at com.android.camera.ImageGetter$ImageGetterRunnable.run(ImageGetter.java:149)
12-09 15:17:02.728: ERROR/UriImage(389): at java.lang.Thread.run(Thread.java:1019)
12-09 15:17:03.717: INFO/ActivityManager(61): Displayed com.android.gallery/com.android.camera.ViewImage: +1s58ms
【问题讨论】:
-
不知道,你能解释一下吗?无论如何,问题应该出在其他地方,因为它创建了一个文件,蚂蚁不是空的,它只是不作为图像打开
-
可能不是您的问题(我只是想了解一下您的设计模式),但通常我会在保存时运行
Thread。 -
我使用此代码将图像保存到 SD - 它可以工作。
-
编辑并包含错误,它现在正确创建文件,打开它有问题
-
尝试保存到 SD,而不是缓存目录
标签: android file bitmap android-intent save