2010-09-16 13 views

risposta

22

Immagino che tu abbia già "scaricato" le immagini dal sito web e desideri ridimensionarle invece di ritagliare? Cioè creare miniature.

questo caso, è possibile utilizzare il seguente:

// load the origial BitMap (500 x 500 px) 
    Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(), 
      R.drawable.android); 

    int width = bitmapOrg.width(); 
    int height = bitmapOrg.height(); 
    int newWidth = 200; 
    int newHeight = 200; 

    // calculate the scale - in this case = 0.4f 
    float scaleWidth = ((float) newWidth)/width; 
    float scaleHeight = ((float) newHeight)/height; 

    // createa matrix for the manipulation 
    Matrix matrix = new Matrix(); 
    // resize the bit map 
    matrix.postScale(scaleWidth, scaleHeight); 

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

    // make a Drawable from Bitmap to allow to set the BitMap 
    // to the ImageView, ImageButton or what ever 
    BitmapDrawable bmd = new BitmapDrawable(resizedBitmap); 

    ImageView imageView = new ImageView(this); 

    // set the Drawable on the ImageView 
    imageView.setImageDrawable(bmd); 

    // center the Image 
    imageView.setScaleType(ScaleType.CENTER); 
+0

grandi opere. ho una domanda però: la classe bitmap supporta la modifica delle sue dimensioni quando è mutabile? o consente solo di modificare i suoi dati? se può cambiare la sua dimensione, cosa faresti al tuo codice per evitare di creare una nuova bitmap? –

+1

Solo fyi, non è necessario creare una bitmap ridimensionata. È possibile semplicemente impostare la matrice su imageView e quindi impostare la bitmap. ImageView applicherà la matrice alla bitmap. –

+1

Questo è scala, non ritaglio ... questo non è esattamente esattamente. –

-2
<ImageView android:id="@+id/title_logo" 
      android:src="@drawable/logo" 
      android:scaleType="centerCrop" android:padding="4dip"/> 
2

Contact Manager Android EditContactActivity utilizza Intent("com.android.camera.action.CROP")

Si tratta di un codice di esempio:

Intent intent = new Intent("com.android.camera.action.CROP"); 
// this will open all images in the Galery 
intent.setDataAndType(photoUri, "image/*"); 
intent.putExtra("crop", "true"); 
// this defines the aspect ration 
intent.putExtra("aspectX", aspectY); 
intent.putExtra("aspectY", aspectX); 
// this defines the output bitmap size 
intent.putExtra("outputX", sizeX); 
intent.putExtra("outputY", xizeY); 
// true to return a Bitmap, false to directly save the cropped iamge 
intent.putExtra("return-data", false); 
//save output image in uri 
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); 

Poi, startActivityWithResult() noto se l'utente ha premuto OK o Annulla. Nel primo caso, l'immagine ritagliata verrà salvata in uri.

+0

Buona idea ma "com.android.camera.action.CROP" non è ufficiale e potrebbe non funzionare su alcuni telefoni. –

+0

Esiste una versione ufficiale? – noelicus

3

migliore collegamento github ->AndroidImageCrop

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    photoPicker(); 
} 

private void photoPicker() { 
    Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); 
    photoPickerIntent.setType("image/*"); 
    startActivityForResult(photoPickerIntent, 1); 
} 

private void crop(Uri photoUri) { 
    Intent intent = new Intent("com.android.camera.action.CROP"); 
    intent.setData(photoUri); 
    intent.putExtra("outputX", 200); 
    intent.putExtra("outputY", 200); 
    intent.putExtra("aspectX", 1); 
    intent.putExtra("aspectY", 1); 
    intent.putExtra("scale", true); 
    intent.putExtra("return-data", true); 
    startActivityForResult(intent, RESULT_CROP); 
} 

protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    super.onActivityResult(requestCode, resultCode, intent); 
    if (resultCode == RESULT_OK) { 
     Uri photoUri = intent.getData(); 
     if (photoUri != null) { 
      Log.i("TAG", "Start Crop!!"); 
      crop(photoUri); 
     } 
    } else if (resultCode == RESULT_CROP) { 
     Toast.makeText(this, "Image crop", Toast.LENGTH_SHORT).show(); 
    } 
} 
Problemi correlati