web-dev-qa-db-fra.com

Android redimensionner le bitmap en gardant le rapport hauteur / largeur

J'ai une vue personnalisée (1066 x 738) et je passe une image bitmap (720x343). Je souhaite mettre à l'échelle le bitmap pour qu'il tienne dans la vue personnalisée sans dépasser la limite du parent.

enter image description here

Je veux réaliser quelque chose comme ça:

enter image description here

Comment dois-je calculer la taille du bitmap?

Comment je calcule la nouvelle largeur/hauteur:

    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);
    }

Mais tout ce que je réalise, c'est ceci:

enter image description here

15
Zbarcea Christian

Vous devriez essayer d'utiliser une matrice de transformation conçue pour ScaleToFit.CENTER. Par exemple:

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