gpt4 book ai didi

android - 内存不足错误 : bitmap size exceeds VM budget (Android)

转载 作者:IT老高 更新时间:2023-10-28 22:25:58 24 4
gpt4 key购买 nike

在 BitmapFactory 中获取异常。不确定是什么问题。 (嗯,我可以猜到这个问题,但不知道为什么会发生)

ERROR/AndroidRuntime(7906): java.lang.OutOfMemoryError: bitmap size exceeds VM budgetERROR/AndroidRuntime(7906):     at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:295)

My code is pretty straight forward. I defined an XML layout w/ a default image. I try to load a bm on the SDCard (if present - it is). If not it shows the default image. Anyway.. Here is code :

public class showpicture extends Activity {
public void onCreate(Bundle savedInstanceState) {

/** Remove menu/status bar **/
requestWindowFeature(Window.FEATURE_NO_TITLE);
final Window win = getWindow();
win.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

Bitmap bm;
super.onCreate(savedInstanceState);
setContentView(R.layout.showpicture);
try {
ImageView mImageButton = (ImageView)findViewById(R.id.displayPicture);
bm = Bitmap.createScaledBitmap(BitmapFactory.decodeFile("/sdcard/dcim/Camera/20091018203339743.jpg"),100, 100, true);
parkImageButton.setImageBitmap(bm);
}
catch (IllegalArgumentException ex) {
Log.d("MYAPP",ex.getMessage());
}
catch (IllegalStateException ex) {

bm=Bitmap.createScaledBitmap 失败有什么想法吗?我在论坛上做了一些研究,它指向this post我只是不知道为什么它不起作用。任何帮助都会很棒!谢谢,

克里斯。

最佳答案

inSampleSize 是一个很好的提示。但固定值通常不能正常工作,因为文件中的大位图通常是用户文件,从微小的缩略图到相机中的 12MP 图像不等。

这是一个快速而肮脏的加载程序。我知道还有改进的余地,比如更好的编码循环,使用 2 的幂来更快地解码,等等。但这是一个工作的开始......

public static Bitmap loadResizedBitmap( String filename, int width, int height, boolean exact ) {
Bitmap bitmap = null;
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile( filename, options );
if ( options.outHeight > 0 && options.outWidth > 0 ) {
options.inJustDecodeBounds = false;
options.inSampleSize = 2;
while ( options.outWidth / options.inSampleSize > width
&& options.outHeight / options.inSampleSize > height ) {
options.inSampleSize++;
}
options.inSampleSize--;

bitmap = BitmapFactory.decodeFile( filename, options );
if ( bitmap != null && exact ) {
bitmap = Bitmap.createScaledBitmap( bitmap, width, height, false );
}
}
return bitmap;
}

顺便说一句,在较新的 API 中,还有很多 BitmapFactory.Option 用于将图像拟合到屏幕 DPI,但我不确定它们是否真的简化了任何事情。恕我直言,使用 android.util.DisplayMetrics.density 或简单地使用固定大小来减少内存消耗似乎效果更好。

关于android - 内存不足错误 : bitmap size exceeds VM budget (Android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1586685/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com