studio recortar para online imagen gratis fotos circulo app android android-imageview resize-crop

para - recortar imagen android studio



Recortar imagen a cuadrado-Android (4)

establecer la altura de la vista de imagen fija, el ancho y establecer dos propiedades para la vista de imagen

android:adjustViewBounds="true" android:scaleType="centerCrop"

hecho

¿Cómo puedo cortar una imagen rectangular (600 x 300) de izquierda a derecha para encajar en ImageView cuadrado? No quiero cambiar el tamaño de la imagen, solo quiero recortarla, para que sea de 300 x 300.

[SOLUCIÓN]

Como dijo @blackbelt

Bitmap cropImg = Bitmap.createBitmap(src, startX, startY, dstWidth, dstHeight);

Es ideal para recortar imágenes. Entonces, ¿cómo se puede recortar automáticamente las imágenes con diferentes tamaños. Creo este código simple para eso:

// From drawable Bitmap src= BitmapFactory.decodeResource(context.getResources(), R.drawable.image); // From URL Bitmap src = null; try { String URL = "http://www.example.com/image.jpg"; InputStream in = new java.net.URL(URL).openStream(); src = BitmapFactory.decodeStream(in); } catch (Exception e) { e.printStackTrace(); } int width = src.getWidth(); int height = src.getHeight(); int crop = (width - height) / 2; Bitmap cropImg = Bitmap.createBitmap(src, crop, 0, height, height); ImageView.setImageBitmap(cropImg);


Ahora xml tiene propiedades como

custom:cropAspectRatioX="2" custom:cropAspectRatioY="1"

Haz ambos 1 si quieres un recorte cuadrado. ahora es de rectangulo

Añadir actividad CropActivity

package agropost.post.agro.com.agropost.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.DisplayMetrics; import android.widget.Button; import com.theartofdev.edmodo.cropper.CropImageView; import agropost.post.agro.com.agropost.R; import agropost.post.agro.com.agropost.Utility.Constants; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; public class CropActivity extends AppCompatActivity { public static boolean isCrop = false; @BindView(R.id.img_crop) CropImageView imgCrop; @BindView(R.id.btn_done) Button btnDone; @BindView(R.id.btn_cancel) Button btnCancel; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_crop); ButterKnife.bind(this); DisplayMetrics displayMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); int width = displayMetrics.widthPixels; width = width - 80; imgCrop.getLayoutParams().height = width; imgCrop.getLayoutParams().width = width; imgCrop.setBackground(null); imgCrop.setScaleType(CropImageView.ScaleType.FIT_CENTER); imgCrop.setImageBitmap(Constants.mDashboardActivity.thumbnail_r); } @OnClick(R.id.btn_done) public void onViewClicked() { isCrop = true; Intent returnIntent = new Intent(); Constants.mDashboardActivity.thumbnail_r = imgCrop.getCroppedImage(); setResult(3, returnIntent); finish(); } @OnClick(R.id.btn_cancel) public void onViewClickedCancel() { byte[] byteArray = getIntent().getByteArrayExtra("default"); Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); Constants.mDashboardActivity.thumbnail_r = bmp; isCrop = true; Intent returnIntent = new Intent(); setResult(3, returnIntent); finish(); } @Override public void onBackPressed() { // super.onBackPressed(); } }

xml de actividad ..............

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/transparent" android:gravity="center" android:orientation="vertical" tools:context=".Activity.CropActivity"> <com.theartofdev.edmodo.cropper.CropImageView xmlns:custom="http://schemas.android.com/apk/res-auto" android:id="@+id/img_crop" android:layout_width="100dp" android:layout_height="100dp" android:background="@drawable/drawer_bg" android:scaleType="centerInside" custom:cropAspectRatioX="2" custom:cropAspectRatioY="1" custom:cropFixAspectRatio="true" custom:cropShape="rectangle" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/btn_done" android:layout_width="match_parent" android:layout_height="60dp" android:layout_marginLeft="@dimen/margin_40" android:layout_marginRight="@dimen/margin_20" android:layout_marginTop="@dimen/margin_20" android:layout_weight="1" android:background="@drawable/btn_bg_green_rounded" android:text="Done" android:textColor="@color/colorWhite" android:textSize="@dimen/fontsize_normal" /> <Button android:id="@+id/btn_cancel" android:layout_width="match_parent" android:layout_height="60dp" android:layout_marginLeft="@dimen/margin_20" android:layout_marginRight="@dimen/margin_40" android:layout_marginTop="@dimen/margin_20" android:layout_weight="1" android:background="@drawable/btn_bg_green_rounded" android:text="Cancel" android:textColor="@color/colorWhite" android:textSize="@dimen/fontsize_normal" android:visibility="gone" /> </LinearLayout> </LinearLayout>

añadir dependencia

implementation ''com.theartofdev.edmodo:android-image-cropper:2.4.+''


Puedes usar

Bitmap dst = Bitmap.createBitmap(src, startX, startY, dstWidth, dstHeight);

De la documentación:

Devuelve un mapa de bits inmutable del subconjunto especificado del mapa de bits de origen. El nuevo mapa de bits puede ser el mismo objeto que la fuente, o se puede haber hecho una copia. Se inicializa con la misma densidad que el mapa de bits original.

Here puedes encontrar la documentación.


Ampliando un poco la respuesta anterior.

Ya que en algunas situaciones puede terminar con una excepción o no con el resultado esperado , simplemente utilizando Bitmap.createBitmap (), como el siguiente:

java.lang.IllegalArgumentException: x + width debe ser <= bitmap.width ()

Heres es una pequeña función que hace el cultivo y maneja algunos de los casos comunes.

Edición: actualizado de acuerdo con el reclamo de droidster.

public static Bitmap cropToSquare(Bitmap bitmap){ int width = bitmap.getWidth(); int height = bitmap.getHeight(); int newWidth = (height > width) ? width : height; int newHeight = (height > width)? height - ( height - width) : height; int cropW = (width - height) / 2; cropW = (cropW < 0)? 0: cropW; int cropH = (height - width) / 2; cropH = (cropH < 0)? 0: cropH; Bitmap cropImg = Bitmap.createBitmap(bitmap, cropW, cropH, newWidth, newHeight); return cropImg; }

Hice varias pruebas con algunas imágenes de diferentes resoluciones y tamaños y funcionó como se esperaba.

También se puede utilizar en otras situaciones, por ejemplo, cuando intenta hacer una imagen redonda "perfectamente" y necesita pasar un mapa de bits cuadrado, etc.