2014-09-07 4 views
0

original_Bitmap to new_Bitmapcréer bitmap ratio de maintien de la taille de l'écran

Je suis en train de faire une demande de papier peint. Et j'ai eu de gros problèmes lors de la mise en fond d'écran avec bitmap. J'ai essayé de trouver la réponse pendant une semaine.

Je veux mettre Bitmap pour papier peint comme

  1. éviter la culture
  2. scaleType: fit_center (alignement vertical central, maintenir le ratio de bitmap d'origine)

Comment puis-je faire? Dois-je créer un nouveau bitmap?

+0

Alors voulez-vous Bitmap pour remplir tout l'écran ou de ne pas être recadrées comme dans les images ci-dessus – Gumbo

+0

? @Gumbo ne pas rogner comme image ci-dessus !! – HoJunLee

Répondre

0

Vous devez redimensionner l'image pour créer une nouvelle image en fonction de la taille de votre écran.

Voici le code:

 Bitmap bitmapOrg = BitmapFactory.decodeFile(getApplicationContext() 
       .getFilesDir().toString() + "/images/" + imagename); 

     Log.e("imageheight", "" + bitmapOrg.getHeight()); 
     Log.e("imagewidth", "" + bitmapOrg.getWidth()); 

     double imageheight = bitmapOrg.getHeight(); 
     double imagewidth = bitmapOrg.getWidth(); 

     DisplayMetrics metrics = getApplicationContext().getResources() 
       .getDisplayMetrics(); 
     double screenwidth = metrics.widthPixels; 
     double sreeenheight = metrics.heightPixels; 

     Log.e("screennwidth", "" + screenwidth); 

     double newratio = screenwidth/imagewidth; 

     Log.e("newratio", "" + newratio); 

     double newratio1 = newratio * imageheight; 
     double newratio2 = newratio * (imagewidth - 10); // 10 margin in width 

     Log.e("newratio1", "" + newratio1); 

     int mainheight = (int) newratio1; 
     // int mainweidth = (int) imagewidth; 
     int mainweidth = (int) newratio2; 
     Log.e("Mainheight", "" + mainheight); 
     Log.e("Mainweidtht", "" + mainweidth); 

     // Here you will get the scaled bitmap 
     Bitmap new_ScaledBitmap = Bitmap.createScaledBitmap(bitmapOrg, mainweidth,mainheight, true); 
     // Use this bitmap as wallpaper 
+0

mmm .. merci tellement pour me répondre, mais ce code ne fonctionne pas .... – HoJunLee

0

Pour adapter le Bitmap à l'écran sans couper rien, vous devez d'abord décider si le rapport d'aspect est plus grand que celui de l'écran a ou plus petit. Si le format de l'image est plus grand que le format de l'écran, cela signifie que le bitmap est plus grand et/ou moins large que l'écran, comme la deuxième image de la question. Vous devez donc l'échelle de l'image en fonction de la hauteur comme ceci:

if(imageWidth/imageHeight > screenWidth/screenHeight){ 
    scaleFactor = screenHeight/imageHeight; 
    imageXPosition = screenWidth/2-imageWidth/2; 
    imageYPosition = 0; 

Sinon, l'image doit être dimensionnée en fonction de la largeur comme celui-ci:

}else{ 
    scaleFactor = screenWidth/imageHeight; 
    imageXPosition = 0; 
    imageYPosition = screenWidth/2-imageWidth/2; 
} 

Vous pouvez utiliser ces valeurs pour dessiner le bitmap à l'aide Matrix ou créer un bitmap mis à l'échelle avec les dimensions imageWidth*scaleFactor et imageHeight*scaleFactor et dessiner à imageXPosition | imageYPosition (ce qui est plus économe de la mémoire.

Questions connexes