2010-07-21 7 views
2

Étant donné une image, je souhaite pouvoir mettre à l'échelle seulement une partie de cette image. Dites, je veux étendre la moitié de l'image de sorte que, cette moitié occupe tout l'espace.Android: Redimensionnement et redimensionnement d'une partie de l'image

Comment est-ce possible?

Est-ce que ImageView fitXY fonctionnera parce que je pensais que cela ne fonctionnera que pour l'image originale entière.

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout linearLayout = new LinearLayout(this); 

      Bitmap bitmap = BitmapFactory.decodeResource(getResources(),  R.drawable.icon); 


      int width = bitmap.getWidth(); 

      int height = bitmap.getHeight(); 

      int newWidth = 640; 

      int newHeight = 480; 


      float scaleWidth = ((float) newWidth)/width; 

      float scaleHeight = ((float) newHeight)/height; 


      Matrix matrix = new Matrix(); 

      matrix.postScale(scaleWidth, scaleHeight); 

      // create the new Bitmap object 

      Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 50, 50, width, 

        height, matrix, true); 

      BitmapDrawable bmd = new BitmapDrawable(resizedBitmap); 



      ImageView imageView = new ImageView(this); 

      imageView.setImageDrawable(bmd); 

      imageView.setScaleType(ScaleType.CENTER); 



      linearLayout.addView(imageView, new LinearLayout.LayoutParams( 

        LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 

      setContentView(linearLayout); 
    } 
} 

Cela ne fonctionne que si CreateBitmap, les coordonnées X et Y des premiers pixels de la source sont 0. sens, je ne suis pas en mesure de prendre un sous-ensemble de l'image. Seulement capable de mettre à l'échelle l'image entière. Mais createBitmap est destiné à sous-créer une image.

Dans le journal, lorsque les paramètres ne sont pas 0, je reçois l'exception suivante: java.lang.IllegalArgumentException: x + largeur doit être < = Bitmap.Width()

S'il vous plaît aider

Répondre

1

donc J'ai dû réparer quelques Typos, mais cet exemple a fait du bon boulot pour moi. http://www.anddev.org/resize_and_rotate_image_-_example-t621.html fautes de frappe:

int width = bitmapOrg.width(); 
int height = bitmapOrg.height(); 

devenir:

int width = bitmapOrg.getWidth(); 
int height = bitmapOrg.getHeight(); 

autrement, a travaillé quand je l'ai essayé agains SDK 7

2

D'abord, vous devez créer une nouvelle image avec la partie que vous voulez à l'échelle à l'aide

createBitmap() //pass the source bitmap, req height and width 

Maintenant à partir du bitmap de résultat, vous devez créer votre bitmap mis à l'échelle en utilisant

createScaledbitmap() //pass the result bitmap , req width, height 

Pour exapmle:

Bitmap originalBitmap = BitmapFactory.decodeResource(res, id); 
Bitmap partImage = originalBitmap.createBitmap(width, height, config); 
Bitmap scaledImage = partImage.createScaledBitmap(partImage, dstWidth, dstHeight, filter);