【发布时间】:2014-01-07 00:22:28
【问题描述】:
我在 sdcard 上有一张图片,需要在图片视图中显示
问题是解码后质量似乎变差了。有什么方法可以在保持质量的同时保留记忆吗?
或者,如果我使用更大的图像,是否有任何方法可以通过缩放来保留内存(避免加载太大的位图)? (我需要保持原图的大小)
感谢您的帮助。
public Bitmap decodeFile(String pubKey, int bookPageID, int type)
throws IOException {
Bitmap b = null;
File f = null;
String uri = null;
FileInputStream fis = null;
Log.d(TAG,"pageID to read: " + bookPageID);
IRIssue issue = Broker.model.issueDataStore.getIRIssue(pubKey);
String imageFolder = IRConstant.issueFolder(issue.year, issue.month, issue.day, issue.pubKey);
// pageID - 1 since the page is an array (start at 0) , but page ID start at 1
if (type == 2){
uri = imageFolder + issue.vol[0].pages[bookPageID - 1].graphicUri;
}else {
uri = imageFolder + issue.vol[0].pages[bookPageID - 1].textUri;
}
f = new File(uri);
Log.d(TAG,"is file: " + uri + " exist?" + f.exists());
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPurgeable = true;
options.inInputShareable = true;
options.inJustDecodeBounds = false;
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
fis = new FileInputStream(f);
b = BitmapFactory.decodeStream(fis, null, options);
fis.close();
return b;
}
【问题讨论】:
-
试试这个 options.inScaled = false; options.inDither = false;
-
仍然报错“位图太大,无法上传到纹理中”
-
我发现问题是位图大小> 2048 * 2048 引起的,如何解决,我试过缩放但质量不好?谢谢
-
如何缩放图像?位图的 options.inSampleSize 对图像进行缩放,不影响质量。
-
我的方法是 1. 通过使用 injustdecodebounds = true 解码位图来获取图像边界 2. 通过我在下面提供的方法找出 insamplesize 3. 而不是使用 BitmapFactory.decodeStream(fis , 空, 选项);有适当的选项。
标签: android image android-layout bitmap android-largeheap