2010-09-16 19 views
12

Estoy analizando un sitio web para mostrar los contenidos en una URL, ya que algunas imágenes están allí. Quiero recortar las imágenes que se analizan desde el sitio. Realmente estoy luchando con esto, ¿alguien me puede ayudar con respecto a esto?Cómo recortar la imagen analizada en android?

Respuesta

22

Supongo que ya ha "sacado" las imágenes del sitio web y quiere cambiar el tamaño en lugar de recortar? Es decir. crear miniaturas

Si es así, puede utilizar los siguientes:

// 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

funciona muy bien. Sin embargo, tengo una pregunta: ¿admite la clase de mapa de bits cambiar su tamaño cuando es mutable? ¿o solo permite modificar sus datos? Si puede cambiar su tamaño, ¿qué le harías a tu código para evitar crear un nuevo mapa de bits? –

+1

Solo fyi, no es necesario crear un mapa de bits redimensionado. Simplemente puede establecer la matriz en el imageView y luego establecer el mapa de bits. La imageView aplicará la matriz al mapa de bits. –

+1

Ésta es una balanza, no una cosecha ... esta no exactamente. –

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

El androide gestor de Contacto EditContactActivity utiliza Intent("com.android.camera.action.CROP")

Este es un ejemplo de código:

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); 

Entonces, startActivityWithResult() a saber si el usuario presionó OK o Cancelar. En el primer caso, la imagen croped se guardará en uri.

+0

Buena idea, pero "com.android.camera.action.CROP" no es oficial y podría no funcionar en algunos teléfonos. –

+0

¿Hay una versión oficial? – noelicus

3

Mejor enlace 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(); 
    } 
} 
Cuestiones relacionadas