#android #performance #bitmap #drawable
#Android #Производительность #растровое изображение #можно рисовать
Вопрос:
У меня большие проблемы с кодом decodeSampleBitmap и конечным размером моих изображений. У меня есть чертежи в папке nodpi drawables, чтобы не умножать один и тот же чертеж в разных папках с разными размерами, и я изменяю размер после aply моего 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 amp;amp; (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, 2037×1440 пикселей, 12,6 КБ.
2-Я использую свой код и загружаю png с разрешением 2037×1440 пикселей и 11,73 МБ. Я не понимаю, что я делаю неправильно. Почему Android умножает на 1000 размер моих чертежей?
10-12 12:06:07.842 12405-12822/com.viridesoft.kiseichuu V/control4: width=2037 height=1440 size=11733120
Редактировать: если я загружу чертеж с помощью BitmapFactory.decodeResource, размер будет таким же, 11733120.
Старый вопрос должен быть изменен. Я понимаю, что не могу больше уменьшить размер своего изображения, и я продолжаю с той же проблемой.
Я загружаю много изображений для создания динамического фона и заряжаю всех персонажей (моего игрока и зомби), в общей сложности до 111 растровых изображений размером 25% пикселей x 10% пикселей от размера экрана и до 30 растровых изображений размером 100% экрана. Я загружаю все эти растровые изображения в действие загрузчика и сохраняю для последующего использования в игре. У меня хорошее качество изображений и папка drawable-nodpi с большим количеством изображений для лучшего разрешения Android, которое я вижу. Моя игра работает плавно на некоторых устройствах (bq aquaris, nexus 5 и т. Д.), Но Постоянно очищает память и работает медленно на других (некоторые планшеты, некоторые устройства среднего класса и т. Д.)
Новый вопрос: как я могу эффективно загружать много изображений для плавного игрового процесса?
Комментарии:
1. Что именно составляет 11,73 МБ? И где именно вы определили окончательное разрешение? Для какого значения вы рассчитываете
inSampleSize
?2.
reqWidth, reqHeight
Какие значения вы запрашиваете?3. я передаю эти значения для образца 1280×720, но вы можете видеть ширину и высоту растрового изображения, чем возвращаемый мой код, с 11733120 байтами, я запрашиваю ширину и высоту экрана
4. Для начала вы должны указать точные цифры. Сообщите все значения, которые я просил. И ответьте на все мои вопросы! Я до сих пор не знаю, откуда берутся эти 11,73 МБ.
5.
if i load the drawable with BitmapFactory.decodeResource the size is the same
??? ну, вы используете BitmapFactory.decodeResource(). Больше ничего. Итак, что вы имеете в виду?