2011-07-05 2 views
0

Je fais une application qui nécessite que l'utilisateur prenne une photo d'eux-mêmes. Les problèmes proviennent tous du fait que l'image doit être 480 x 800. L'appareil photo sur l'appareil que j'utilise (le Motorola Xoom) ne prend évidemment pas en charge ce rapport d'aspect.Android: Recadrer un bitmap (d'une manière étrange)

Je cherche un moyen de prendre la photo dans une taille plus grande (1280 x 960 a une taille assez grande), puis commencer à raser de gros morceaux des deux côtés, le haut et le bas.

Donc, si quelqu'un peut fournir un moyen de le faire (ou une meilleure idée), je l'apprécierais grandement.

Merci.

Répondre

1

Une meilleure idée est de redimensionner l'image à 480 maximum en largeur ou 800 maximum en hauteur et l'afficher avec un rembourrage approprié. Voici une façon simple de faire cela:

import android.graphics.Bitmap; 

public class ImageUtils { 
    public static Bitmap BitmapResizeToMaxXorY(Bitmap srcBitmap, int destSizeX, int destSizeY) { 
     Bitmap ret = null; 

     if (srcBitmap != null && destSizeX > 0 && destSizeY > 0) { 
      Float origSizeX = new Float(srcBitmap.getWidth()); 
      Float origSizeY = new Float(srcBitmap.getHeight()); 

      if (origSizeX > destSizeX || origSizeY > destSizeY) { 
       float origRatio = origSizeX/origSizeY; 
       float destRatio = destSizeX/destSizeY; 

       float targetSizeX; 
       float targetSizeY; 

       if (origRatio >= destRatio) { 
        if (destSizeX >= origSizeX) { 
         targetSizeX = origSizeX; 
        } else { 
         targetSizeX = destSizeX; 
        } 

        targetSizeY = targetSizeX/origRatio; 
       } else { 
        if (destSizeY >= origSizeY) { 
         targetSizeY = origSizeY; 
        } else { 
         targetSizeY = destSizeY; 
        } 

        targetSizeX = targetSizeY * origRatio; 
       } 

       ret = Bitmap.createScaledBitmap(srcBitmap, (int) targetSizeX, (int) targetSizeY, false); 
      } else { 
       // original image is smaller than destination sizes so we are returning original 
       ret = srcBitmap; 
      }   
     } 

     return ret; 
    } 
} 
+0

Cheers bourgeon. Je vais faire un tourbillon et vous faire savoir le résultat! – Matt

+0

Désolé, quelques questions. Je suppose que les paramètres 'destSizeX' et 'destSizeY' sont les tailles maximales que je devrais entrer? – Matt

+0

oui, c'est correct – Ognyan