Crop image in circular shape in android
Today i am sharing cropping an image and convert it into circular shape. Following Class will helps you to convert an image into circular shape.
There is two method i am posting here for cropping rounded images.
MainActivity.Class
There is two method i am posting here for cropping rounded images.
import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.PorterDuff.Mode; import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.RectF; public class GraphicsUtil { public Bitmap getCircleBitmap(Bitmap bitmap, int pixels) { Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xffff0000; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); final RectF rectF = new RectF(rect); paint.setAntiAlias(true); paint.setDither(true); paint.setFilterBitmap(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); canvas.drawOval(rectF, paint); paint.setColor(Color.BLUE); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth((float) 4); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); return output; } public Bitmap getRoundedShape(Bitmap scaleBitmapImage) { int targetWidth = 125; int targetHeight = 125; Bitmap targetBitmap = Bitmap.createBitmap(targetWidth, targetHeight,Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(targetBitmap); Path path = new Path(); path.addCircle(((float) targetWidth - 1) / 2, ((float) targetHeight - 1) / 2, (Math.min(((float) targetWidth), ((float) targetHeight)) / 2), Path.Direction.CCW); canvas.clipPath(path); Bitmap sourceBitmap = scaleBitmapImage; canvas.drawBitmap(sourceBitmap, new Rect(0, 0, sourceBitmap.getWidth(), sourceBitmap.getHeight()), new Rect(0, 0, targetWidth, targetHeight), null); return targetBitmap; } }
MainActivity.Class
import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; public class MainActivity extends Activity implements OnClickListener { // keep track of camera capture intent final int CAMERA_CAPTURE = 1; // keep track of cropping intent final int PIC_CROP = 2; // captured picture uri private Uri picUri; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // retrieve a reference to the UI button Button captureBtn = (Button) findViewById(R.id.capture_btn); // handle button clicks captureBtn.setOnClickListener(this); } /** * Click method to handle user pressing button to launch camera */ public void onClick(View v) { if (v.getId() == R.id.capture_btn) { try { // use standard intent to capture an image Intent captureIntent = new Intent( MediaStore.ACTION_IMAGE_CAPTURE); // we will handle the returned data in onActivityResult startActivityForResult(captureIntent, CAMERA_CAPTURE); } catch (ActivityNotFoundException anfe) { // display an error message String errorMessage = "Whoops - your device doesn't support capturing images!"; Toast toast = Toast.makeText(this, errorMessage,Toast.LENGTH_SHORT); toast.show(); } } } /** * Handle user returning from both capturing and cropping the image */ protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { // user is returning from capturing an image using the camera if (requestCode == CAMERA_CAPTURE) { // get the Uri for the captured image picUri = data.getData(); // carry out the crop operation performCrop(); } // user is returning from cropping the image else if (requestCode == PIC_CROP) { // get the returned data Bundle extras = data.getExtras(); // get the cropped bitmap Bitmap thePic = extras.getParcelable("data"); // retrieve a reference to the ImageView ImageView picView = (ImageView) findViewById(R.id.picture); // display the returned cropped image GraphicsUtil graphicUtil = new GraphicsUtil(); //picView.setImageBitmap(graphicUtil.getRoundedShape(thePic)); picView.setImageBitmap(graphicUtil.getCircleBitmap(thePic, 16)); } } } /** * Helper method to carry out crop operation */ private void performCrop() { // take care of exceptions try { // call the standard crop action intent (the user device may not // support it) Intent cropIntent = new Intent("com.android.camera.action.CROP"); // indicate image type and Uri cropIntent.setDataAndType(picUri, "image/*"); // set crop properties cropIntent.putExtra("crop", "true"); // indicate aspect of desired crop cropIntent.putExtra("aspectX", 1); cropIntent.putExtra("aspectY", 1); // indicate output X and Y cropIntent.putExtra("outputX", 256); cropIntent.putExtra("outputY", 256); // retrieve data on return cropIntent.putExtra("return-data", true); // start the activity - we handle returning in onActivityResult startActivityForResult(cropIntent, PIC_CROP); } // respond to users whose devices do not support the crop action catch (ActivityNotFoundException anfe) { // display an error message String errorMessage = "Whoops - your device doesn't support the crop action!"; Toast toast = Toast .makeText(this, errorMessage, Toast.LENGTH_SHORT); toast.show(); } } }
More reference link
No comments: