Recortar una imagen de bitmap

¿Cómo puedo recortar una imagen de bitmap? esta es mi pregunta. He intentado algunos conceptos con intenciones, pero todavía fallan …

Estoy teniendo una imagen de bitmap que quiero recortar !!

aquí está el código:

Intent intent = new Intent("com.android.camera.action.CROP"); intent.setClassName("com.android.camera", "com.android.camera.CropImage"); File file = new File(filePath); Uri uri = Uri.fromFile(file); intent.setData(uri); intent.putExtra("crop", "true"); intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); intent.putExtra("outputX", 96); intent.putExtra("outputY", 96); intent.putExtra("noFaceDetection", true); intent.putExtra("return-data", true); startActivityForResult(intent, REQUEST_CROP_ICON); 

¿Alguien podría ayudarme con respecto a esto @Gracias

Usé este método para recortar la imagen y funciona perfecto:

 Bitmap bmp=BitmapFactory.decodeResource(getResources(), R.drawable.xyz); resizedbitmap1=Bitmap.createBitmap(bmp, 0,0,yourwidth, yourheight); 

createBitmap () toma bitmap, inicia X, inicia Y, ancho y alto como parámetro

¡Usar la respuesta anterior no funciona si quieres cortar / recortar áreas particularmente fuera de límites ! Al usar este código, siempre obtendrá el tamaño que desee, incluso si la fuente es más pequeña.

 // Here I want to slice a piece "out of bounds" starting at -50, -25 // Given an endposition of 150, 75 you will get a result of 200x100px Rect rect = new Rect(-50, -25, 150, 75); // Be sure that there is at least 1px to slice. assert(rect.left < rect.right && rect.top < rect.bottom); // Create our resulting image (150--50),(75--25) = 200x100px Bitmap resultBmp = Bitmap.createBitmap(rect.right-rect.left, rect.bottom-rect.top, Bitmap.Config.ARGB_8888); // draw source bitmap into resulting image at given position: new Canvas(resultBmp).drawBitmap(bmp, -rect.left, -rect.top, null); 

...¡y tu estas listo!

Tuve un problema similar con el cultivo y después de probar numerosos enfoques descubrí este que tenía sentido para mí. Este método solo cosecha la imagen en forma cuadrada, todavía estoy trabajando en la forma circular (no dude en modificar el código para obtener la forma que necesita).

Entonces, primero tienes tu bitmap que quieres recortar:

 Bitmap image; //you need to initialize it in your code first of course 

La información de la imagen se almacena en una matriz int [] que no es más que una matriz de enteros que contiene el valor del color de cada píxel, comenzando en la esquina superior izquierda de la imagen con el índice 0 y terminando en la esquina inferior derecha con el índice N Puede obtener esta matriz con el método Bitmap.getPixels () que toma varios argumentos.

Necesitamos la forma cuadrada, por lo tanto, necesitamos acortar el más largo de los lados. Además, para mantener la imagen centrada, el recorte debe realizarse en ambos lados de la imagen. Espero que la imagen te ayude a entender lo que quiero decir. Representación visual del cultivo. Los puntos rojos en la imagen representan los píxeles iniciales y finales que necesitamos y la variable con el guión es numéricamente igual a la misma variable sin el guión.

Ahora finalmente el código:

 int imageHeight = image.getHeight(); //get original image height int imageWidth = image.getWidth(); //get original image width int offset = 0; int shorterSide = imageWidth < imageHeight ? imageWidth : imageHeight; int longerSide = imageWidth < imageHeight ? imageHeight : imageWidth; boolean portrait = imageWidth < imageHeight ? true : false; //find out the image orientation //number array positions to allocate for one row of the pixels (+ some blanks - explained in the Bitmap.getPixels() documentation) int stride = shorterSide + 1; int lengthToCrop = (longerSide - shorterSide) / 2; //number of pixel to remove from each side //size of the array to hold the pixels (amount of pixels) + (amount of strides after every line) int pixelArraySize = (shorterSide * shorterSide) + (shorterImageDimension * 1); int pixels = new int[pixelArraySize]; //now fill the pixels with the selected range image.getPixels(pixels, 0, stride, portrait ? 0 : lengthToCrop, portrait ? lengthToCrop : 0, shorterSide, shorterSide); //save memory image.recycle(); //create new bitmap to contain the cropped pixels Bitmap croppedBitmap = Bitmap.createBitmap(shorterSide, shorterSide, Bitmap.Config.ARGB_4444); croppedBitmap.setPixels(pixels, offset, 0, 0, shorterSide, shorterSide); //I'd recommend to perform these kind of operations on worker thread listener.imageCropped(croppedBitmap); //Or if you like to live dangerously return croppedBitmap;