Android rotation du bitmap 90 degrés donne lieu à une image écrasée. Besoin d'une rotation réelle entre le portrait et le paysage

J'essaie de faire pivoter une image bitmap de 90 degrés pour la modifier d'un format paysage à un format portrait. Exemple:

[a B c d]
[E, f, g, h]
[I, j, k, l]

  • ORMLite - CallBatchTasks () individuellement ou une fois pour toutes les mises à jour?
  • Impossible d'appliquer la luminosité de l'écran système par programme dans Android
  • Quel adaptateur dois-je utiliser pour utiliser HashMap dans une liste
  • Comment renvoyer int array de Java vers JNI
  • Est-il possible de compresser de la vidéo sur Android?
  • Bluetooth LE ScanFilters ne fonctionne pas sur Android M
  • Tourné 90 degrés dans le sens des aiguilles d'une montre devient

    [I, e, a]
    [J, f, b]
    [K, g, c]
    [L, h, d]

    En utilisant le code ci-dessous (à partir d'un exemple en ligne), l'image est tournée de 90 degrés mais conserve le rapport d'aspect du paysage afin que vous obtenez une image écrasée verticalement. Est-ce que je fais quelque chose de mal? Existe-t-il une autre méthode que je dois utiliser? Je suis également disposé à faire pivoter le fichier jpeg que j'utilise pour créer le bitmap si cela est plus facile.

    // create a matrix for the manipulation Matrix matrix = new Matrix(); // resize the bit map matrix.postScale(scaleWidth, scaleHeight); // rotate the Bitmap matrix.postRotate(90); // recreate the new Bitmap Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOriginal, 0, 0, widthOriginal, heightOriginal, matrix, true); 

  • Effet de curling de la page pour les activités dans Android
  • Android + gradle: différentes méta-données de manifeste par saveur
  • Changer la couleur du bouton d'action flottante d'Appcompat 22.2.0 par programme
  • Batterie Android dans SDK
  • Android Room: comment modeler les relations?
  • Android: tentative de sérialisation ... Ouais-tu enregistrer un adaptateur de type? "
  • 4 Solutions collect form web for “Android rotation du bitmap 90 degrés donne lieu à une image écrasée. Besoin d'une rotation réelle entre le portrait et le paysage”

    C'est tout ce qu'il faut pour faire pivoter l'image:

     Matrix matrix = new Matrix(); matrix.postRotate(90); rotated = Bitmap.createBitmap(original, 0, 0, original.getWidth(), original.getHeight(), matrix, true); 

    Dans votre exemple de code, vous avez inclus un appel à PostScale. Est-ce que cela pourrait être la raison pour laquelle votre image est étirée? Peut-être retirer celui-là et faire d'autres tests.

    Voici comment vous pouvez le faire tourner correctement (cela assure une bonne rotation de l'image)

     public static Bitmap rotate(Bitmap b, int degrees) { if (degrees != 0 && b != null) { Matrix m = new Matrix(); m.setRotate(degrees, (float) b.getWidth() / 2, (float) b.getHeight() / 2); try { Bitmap b2 = Bitmap.createBitmap( b, 0, 0, b.getWidth(), b.getHeight(), m, true); if (b != b2) { b.recycle(); b = b2; } } catch (OutOfMemoryError ex) { throw ex; } } return b; } 

    Ce code a bien fonctionné pour moi:

      Matrix matrix = new Matrix(); matrix.setRotate(90, 0, 0); matrix.postTranslate(original.getHeight(), 0); rotatedBitmap = Bitmap.createBitmap(newWidth, newHeight, original.getConfig()); Canvas tmpCanvas = new Canvas(rotatedBitmap); tmpCanvas.drawBitmap(original, matrix, null); tmpCanvas.setBitmap(null); 

    Vérifiez la taille de la toile où vous dessinez le bitmap, peut-être votre toile est-elle encore un paysage, donc seule la partie carrée du bitmap tourné pourrait être vue.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.