我对decodeSampleBitmap代码和我的图像的最终大小有很大的问题。我在nodpi drawables文件夹中有我的drawables,不能在differents文件夹中使用不同大小的相同drawable,并且我在我的decodeSampleBitmap之后重新调整大小。
我有用于加载位图的代码:
public static int calculateInSampleSize(
BitmapFactory.Options options, int reqWidth, int reqHeight) {
// Raw height and width of image
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) {
final int halfHeight = height / 2;
final int halfWidth = width / 2;
// Calculate the largest inSampleSize value that is a power of 2 and keeps both
// height and width larger than the requested height and width.
while ((halfHeight / inSampleSize) >= reqHeight && (halfWidth / inSampleSize) >= reqWidth) {
inSampleSize *= 2;
}
}
return inSampleSize;
}
public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId, int reqWidth, int reqHeight) {
// First decode with inJustDecodeBounds=true to check dimensions
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(res, resId, options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
return BitmapFactory.decodeResource(res, resId, options);
}
我可以在文档中获得的代码。好吧,我认为这是为了更有效地加载图像,但我有内存问题。我尝试解释这个问题。
1 - 我想加载一个png,2037x1440像素,12.6kb。
2-I aply我的代码并加载了一个2037x1440像素和11,73 MB的png。我不介意我做错了什么。为什么android乘以我的drawables的大小1000?
10-12 12:06:07.842 12405-12822/com.viridesoft.kiseichuu V/control4: width=2037 height=1440 size=11733120
编辑:如果我用BitmapFactory.decodeResource加载drawable,大小是相同的,11733120。
旧问题应该改变。我知道我不能减少更多的图像尺寸,我继续遇到同样的问题。
我加载了很多图像以创建一个dinamical背景并为所有角色(我的播放器和僵尸)充电,直到屏幕大小的25%px x 10%px的111位图,直到100的30位图% 屏幕尺寸。我在加载器活动中加载所有这些位图并保存以供以后在游戏中使用。我有一个高质量的图像和一个drawable-nodpi文件夹,有很多图像,我看到最好的Android分辨率。我的游戏在某些设备(bq aquaris,nexus 5等)中流畅,但是不断清理内存并且在其他设备中运行缓慢(某些平板电脑,某些中档设备等)
新问题是: 如何为流畅的游戏体验有效地加载大量图像?