Странное масштабирование Android

Я не могу понять, как работает масштабирование андроида, я использовал матрицу и постмасштабировал битмап из размера 540 на 960 и получается 682 на 368, когда я масштабирую на 1,067 и 1,023.

540 * 1.067 = 576 not 368
960 * 1.023 = 981 not 682

Я не могу понять логику масштабирования, а также значение, которое он масштабирует, изменяется с 0,67 до 0,7 вместо 1,067 и 1,023, которые я туда вставил.

Кто-нибудь знает, как это работает, и помочь мне?

РЕДАКТИРОВАТЬ: Вот код, который выполняет масштабирование:

public Bitmap resizeBitmap(Bitmap b){
  int width = b.getWidth();
  int height = b.getHeight();
  Matrix max = new Matrix();

  max.postScale(Vars.screenWidthMulti, Vars.screenHeightMulti);
  Bitmap resizedBitmap = Bitmap.createBitmap(b, 0, 0, width, height, max, false);
  return resizedBitmap;

}

Я не знаю о Bitmap.createScaledBitmap, но если он помогает, он дает тот же результат, поэтому я думаю, что это просто масштабированная матрица, как здесь:/

EDIT2: я обнаружил, что масштабирование на 1,5f по обеим осям сделало растровое изображение исходным размером, теперь коэффициент масштабирования, полученный путем деления длин, похоже, не совпадает с использованием матриц масштабирования, поэтому я понятия не имею, как «конвертировать» их для правильной работы.


person Patrick Dahlin    schedule 16.05.2013    source источник
comment
Можете ли вы опубликовать фактический код, который вы используете для масштабирования?   -  person Bryan Herbst    schedule 16.05.2013
comment
Просто дикое предположение, возможно, при масштабировании учитывается intrinsic высота и ширина.   -  person Mehul Joisar    schedule 16.05.2013
comment
Ну, я не очень хорошо разбираюсь в внутренней ширине и высоте, но из того, что я читал, я думаю, что это не из-за этого.   -  person Patrick Dahlin    schedule 17.05.2013
comment
Теперь я обнаружил, что работа со значениями, которые имеют более одного десятичного знака, создает это странное поведение. Но как я должен масштабировать что-то, что должно быть 1,07, если я могу иметь только один десятичный знак и сохранять его относительно одинаковый размер? Изменить: мне нужно умножить его намного больше, чем нужно, чтобы получить правильный размер растрового изображения o.o   -  person Patrick Dahlin    schedule 17.05.2013


Ответы (1)


Я обнаружил, что масштабирование Matrix делит введенное значение на 1,5f, поэтому оно не имело никакого смысла, когда оно масштабировалось так странно. Вот что я добавил в функцию, которая теперь работает нормально (по крайней мере, для масштабирования 1f и выше):

if(Vars.screenWidthMulti > 1 && Vars.screenWidthMulti != 1){
    scaleWidth = 1.5f+(Vars.screenWidthMulti-1)*1.5f;
    scaleHeight = 1.5f+(Vars.screenHeightMulti-1)*1.5f;
}else if(Vars.screenWidthMulti == 1){
    scaleWidth = 1f;
    scaleHeight = 1f;
}else if(Vars.screenWidthMulti < 1){
    scaleWidth = 1.5f -(Vars.screenWidthMulti*1.5f);
    scaleHeight = 1.5f -(Vars.screenHeightMulti*1.5f);
}

примечание: я еще не тестировал масштабирование ниже 1, так что будьте осторожны.

person Patrick Dahlin    schedule 17.05.2013