0

Android のスケーリングがどのように機能するのか理解できません。マトリックスを使用し、サイズ 540 x 960 のビットマップを postScaled しました。1.067 と 1.023 でスケーリングすると、682 x 368 になります。

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

スケーリングのロジックを理解できません。また、スケーリングする値も、そこに入れた 1.067 と 1.023 ではなく 0.67 から 0.7 に変化します。

誰かがこれがどのように機能するかを知っていて、私を助けてくれますか?

編集:スケーリングを行うコードは次のとおりです。

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 でスケーリングすると、ビットマップが元のサイズになることがわかりました。長さを分割することによって得られるスケーリング係数は、マトリックスが使用するスケーリングと一致しないように見えるため、「変換」する方法がわかりません。適切に機能するようにします。

4

1 に答える 1

0

マトリックスのスケーリングでは、入力された値が 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未満のスケーリングはまだテストしていないので注意してください。

于 2013-05-17T20:51:33.327 に答える