2012-05-27 17 views
10

Buduję androida, gdzie. Wewnątrz jednego działania mam przycisk obrazu. Po kliknięciu otwiera się galeria i mogę wybrać obraz. Następnie ustawiłem ten obraz jako nowy obraz przycisku obrazu. Problem polega na tym, że obraz jest zbyt duży w mojej działalności. Jak mogę dopasować go do mojego przycisku obrazu?Jak zmienić rozmiar obrazu, który wybrałem z galerii na Androidzie?

protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

    switch(requestCode) { 
    case SELECT_PHOTO: 
     if(resultCode == RESULT_OK){ 
      Uri selectedImage = imageReturnedIntent.getData(); 
      String[] filePathColumn = {MediaStore.Images.Media.DATA}; 

      Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); 
      cursor.moveToFirst(); 

      int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
      String filePath = cursor.getString(columnIndex); 
      cursor.close(); 


      Bitmap yourSelectedImage = BitmapFactory.decodeFile(filePath); 

      mImageButton.setImageBitmap(yourSelectedImage); 
     } 
    } 
} 

Odpowiedz

33

You może użyć tej metody, aby uzyskać obraz o zmienionym rozmiarze. W ten sposób można uniknąć OutOfMemoryError

public static Bitmap decodeUri(Context c, Uri uri, final int requiredSize) 
      throws FileNotFoundException { 
     BitmapFactory.Options o = new BitmapFactory.Options(); 
     o.inJustDecodeBounds = true; 
     BitmapFactory.decodeStream(c.getContentResolver().openInputStream(uri), null, o); 

     int width_tmp = o.outWidth 
       , height_tmp = o.outHeight; 
     int scale = 1; 

     while(true) { 
      if(width_tmp/2 < requiredSize || height_tmp/2 < requiredSize) 
       break; 
      width_tmp /= 2; 
      height_tmp /= 2; 
      scale *= 2; 
     } 

     BitmapFactory.Options o2 = new BitmapFactory.Options(); 
     o2.inSampleSize = scale; 
     return BitmapFactory.decodeStream(c.getContentResolver().openInputStream(uri), null, o2); 
    } 
+2

Czy możesz wyjaśnić, co oznacza parametr "requiredSize"? – TrungDQ

3

Patrz tej LINK

przeznaczenie: Bitmap.createScaledBitmap (SRC bitmapy int dstWidth, int dstHeight, filtr Boolean)

lub wykorzystywać te metody ::

public Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) { 
    int width = bm.getWidth(); 
    int height = bm.getHeight(); 
    float scaleWidth = ((float) newWidth)/width; 
    float scaleHeight = ((float) newHeight)/height; 

    // create a matrix for the manipulation 
    Matrix matrix = new Matrix(); 

    // resize the bit map 
    matrix.postScale(scaleWidth, scaleHeight); 

    // recreate the new Bitmap 
    Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false); 

    return resizedBitmap; 
} 
+0

będę nazywał tę metodę po: Bitmap yourSelectedImage = BitmapFactory.decodeFile (filePath); – user1420042

+0

Tak, możesz zadzwonić pod numer –

+0

, ale dostaję błąd runtime – user1420042

Powiązane problemy