我正在将一组位图调整到一定百分比的屏幕(所以在所有设备上看起来都一样)。一些位图是大小为+ 256kb的精灵(爆炸等)。
显然,一旦位图转换两次,VM就会耗尽内存,位图只会在android应用程序的开头转换,但它仍然会出错。
任何人都可以告诉我,有没有更好,更快,更有效的方法将这些代码作为位图返回。
出于好奇,是通过引用传递的位图值? (与对象参数一样,对同一个对象使用相同的内存行吗?)。
无论如何这里是z代码:
public Bitmap ResizeBitmap(Bitmap bitmap, float s_percentage, int frames, int viewport_width, int viewport_height)
{
float percentage = s_percentage / 100.0f;
float scale = viewport_width / 100 * percentage;
if(viewport_width < viewport_height)
{
scale = viewport_height / 100 * percentage;
}
int newWidth = (int) (bitmap.getWidth() * scale);
int newHeight = (int) (bitmap.getHeight() * scale);
if(newWidth <= 0 || newHeight <= 0)
{
// Extra check, for invalid width/height
Log.e("Function List, Resize Bitmap", "invalid dimension ("+newWidth+"x"+newHeight+")");
return bitmap;
}
//Round up to closet factor of total frames
int rW = (newWidth/frames)+1;
newWidth = rW*frames;
Bitmap newBitmap = Bitmap.createScaledBitmap(bitmap, newWidth, newHeight, false);
return newBitmap;
}
答案 0 :(得分:1)
要进入虚拟机预算,请尝试按比例缩小您的位图。
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile( filename, options );
options.inJustDecodeBounds = false;
options.inSampleSize = 4;
bitmap = BitmapFactory.decodeFile( filename, options );
if ( bitmap != null ) {
bitmap = Bitmap.createScaledBitmap( bitmap, width, height, false );
}
//将SampleSize调整为2,4,8等值