Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
danek130995
24 / 24 / 1
Регистрация: 25.05.2014
Сообщений: 874
#1

CalculateInSampleSize - Программирование Android

02.12.2015, 20:09. Просмотров 260. Ответов 0
Метки нет (Все метки)

Мне кажется, или в методе calculateInSampleSize для расчета требуемого размера bitmap, который дает хелп гугл и который представлен в уроке 160, использование оператора || немного неправильно?
Вот код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public static Bitmap decodeSampledBitmapFromResource(String path,
      int reqWidth, int reqHeight) {
 
    // Читаем с inJustDecodeBounds=true для определения размеров
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(path, options);
 
    // Вычисляем inSampleSize
    options.inSampleSize = calculateInSampleSize(options, reqWidth,
        reqHeight);
 
    // Читаем с использованием inSampleSize коэффициента
    options.inJustDecodeBounds = false;
    return BitmapFactory.decodeFile(path, options);
  }
 
  public static int calculateInSampleSize(BitmapFactory.Options options,
      int reqWidth, int reqHeight) {
    // Реальные размеры изображения 
    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;
 
      // Вычисляем наибольший inSampleSize, который будет кратным двум
      // и оставит полученные размеры больше, чем требуемые 
      while ((halfHeight / inSampleSize) > reqHeight
          && (halfWidth / inSampleSize) > reqWidth) {
        inSampleSize *= 2;
      }
    }
 
    return inSampleSize;
  }
Представим ситуацию, когда height > reqHeight, а width < reqWidth. Условие с || выполнится, так как если первое True, то второе даже проверятся не будет.
Условие цикла while (halfWidth / inSampleSize) > reqWidth не выполнится по-любому, так как ширина меньше требуемой изначально и мы получается за зря потратили время на вычисления halfHeight и halfWidth и на цикл While. А вот если бы мы написали условие для if вот так:
Java
1
if (height > reqHeight | width > reqWidth)
то проверились бы оба условия, и уже на данном этапе мы бы дальше не пошли и сразу вернули бы inSampleSize=1.

А вы как считаете?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru