web-dev-qa-db-ja.com

Androidアスペクト比を維持しながらビットマップのサイズを変更

カスタムビュー(1066 x 738)があり、ビットマップイメージ(720x343)を渡します。親の境界を超えることなく、カスタムビューに収まるようにビットマップをスケーリングします。

enter image description here

私はこのような何かを達成したい:

enter image description here

ビットマップサイズを計算するにはどうすればよいですか?

新しい幅/高さの計算方法:

    public static Bitmap getScaledBitmap(Bitmap b, int reqWidth, int reqHeight)
    {
        int bWidth = b.getWidth();
        int bHeight = b.getHeight();

        int nWidth = reqWidth;
        int nHeight = reqHeight;

        float parentRatio = (float) reqHeight / reqWidth;

        nHeight = bHeight;
        nWidth = (int) (reqWidth * parentRatio);

        return Bitmap.createScaledBitmap(b, nWidth, nHeight, true);
    }

しかし、私が達成しているのはこれだけです:

enter image description here

15

ScaleToFit.CENTER用に作成された変換マトリックスを使用してみてください。例えば:

Matrix m = new Matrix();
m.setRectToRect(new RectF(0, 0, b.getWidth(), b.getHeight()), new RectF(0, 0, reqWidth, reqHeight), Matrix.ScaleToFit.CENTER);
return Bitmap.createBitmap(b, 0, 0, b.getWidth(), b.getHeight(), m, true);
60
matiash