我有60张图片用于我的应用。每张图片的尺寸仅为(约)25KB。我对大写使用单字母命名约定,对小写使用双字母。
a.png
aa.png
在我的布局中,我有10个ImageView,我按照从数据库中提取的单词以编程方式设置图像位图。
我的问题是,我可能没有正确实施羽绒采样。我将所有10个ImageView添加到ImageView数组,然后找到它们根据数据库中单词的字符数组设置它们的位图值。这是我设置图像视图的方法:
for(int j = 0; j < myWord.length(); j++){
char[] chars = myWord.toCharArray();
if(Character.isUpperCase(chars[j])){
int imgID = getResources().getIdentifier(String.valueOf(chars[j]).toLowerCase(), "drawable", getPackageName());
letters[j].setTag(String.valueOf(chars[j]).toUpperCase());
letters[j].setImageBitmap(CalculateSize.decodeSampledBitmapFromResource(getResources(), imgID, 75, 75));
}else if(Character.isLowerCase(chars[j])){
int imgID = getResources().getIdentifier(String.valueOf(chars[j]) + String.valueOf(chars[j]), "drawable", getPackageName());
letters[j].setTag(chars[j] + chars[j]);
letters[j].setImageBitmap(CalculateSize.decodeSampledBitmapFromResource(getResources(),imgID, 75, 75));
}
以下是我调整大小的方法。我得到了一个带有inSampleSize = 4
设置的3个字母的单词。但是,无论我将它设置为什么,我都无法再次使用它:
public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight){
// Height and Width of image
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 12;
if (height > reqHeight || width > reqWidth) {
// Calculate ratios of height and width
final int heightRatio = Math.round((float) height / (float) reqHeight);
final int widthRatio = Math.round((float) width / (float) reqWidth);
// Choose smallest ratio as inSampleSize value.
inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
}
return inSampleSize;
}
public static Bitmap decodeSampledBitmapFromResource(Resources res, int resID, int reqWidth, int reqHeight){
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(res, resID, options);
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
options.inJustDecodeBounds = false;
return BitmapFactory.decodeResource(res, resID, options);
}
}
答案 0 :(得分:0)
最终我认为答案是使用更小的图像。
我在我的代码中添加了调试日志记录,它在采样之前给出了每个图像的高度和宽度,然后它给出了我选择的最小比率。
每张图片达到了930 x 1110 dp,我试图以1/12的大小对其进行采样,在崩溃之前仍然将堆增加到42MB +。
我认为我需要做的是将图像大小调整为现在大小的1/4,并将那些缩小一半,甚至1/4。
我可以为阅读它的8个人更新此问题,以便通知您是否有效。
修改:更新了图片的原始大小,这完美无瑕。