Introduction
This article describes how to capture and crop an image on a button click and show it in an ImageView in Android. You need to first open the camera by writing this code for the button click. In this, you will use an Intent to start the camera.
- public void onClick(View v) {
- Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
- startActivityForResult(cameraIntent, CAMERA_REQUEST);
Now you will create a method, OnActivityResult(), to be called when the activity you started has finished. In this, you will use a Bitmap class object to draw the image. In this you will write this code:
- if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
- Bitmap photo = (Bitmap) data.getExtras().get("data");
- imageView.setImageBitmap(photo);
- }
Step 1
Now create an XML file with the following content:
- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
-
- android:background="#80BFFF">
-
- <Button android:id="@+id/button1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Click">
- </Button>
-
- <ImageView
- android:id="@+id/imageView1"
- android:layout_height="fill_parent"
- android:layout_width="fill_parent"
- android:layout_centerHorizontal="true">
- </ImageView>
-
- <ImageView
- android:id="@+id/imageView2"
- android:layout_height="fill_parent"
- android:layout_width="fill_parent"
- android:layout_centerHorizontal="true">
- </ImageView>
-
-
- <Button android:id="@+id/button2"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Crop"
- android:layout_alignParentBottom="true">
- </Button>
-
-
- </RelativeLayout>
Step 2
- package com.imagecaptureapplication;
- import android.app.Activity;
- import android.content.Intent;
- import android.graphics.Bitmap;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.Button;
- import android.widget.ImageView;
-
- public class MainActivity extends Activity {
- private static final int CAMERA_REQUEST = 1888;
- ImageView imageView,imageView2;
-
- Bitmap photo;
- Button crop;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- imageView = (ImageView)this.findViewById(R.id.imageView1);
- imageView2 = (ImageView)this.findViewById(R.id.imageView1);
- Button photoButton = (Button) this.findViewById(R.id.button1);
- crop=(Button)findViewById(R.id.button2);
- photoButton.setOnClickListener(new View.OnClickListener() {
-
- @Override
- public void onClick(View v) {
- Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
- startActivityForResult(cameraIntent, CAMERA_REQUEST);
- }
- });
-
- }
-
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {
- photo = (Bitmap) data.getExtras().get("data");
- imageView.setImageBitmap(photo);
- }
- performcrop();
- }
-
- private void performcrop() {
- crop.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- Bitmap croppedBmp = Bitmap.createBitmap(photo, 0, 0, photo.getWidth(),photo.getHeight()-30);
- imageView2.setImageBitmap(croppedBmp);
-
- }
- });
- }
- }
Step 3
Add permission to the Android menifest.xml file:
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.capture"
- android:versionCode="1"
- android:versionName="1.0" >
-
- <uses-permission android:name="android.permission.CAMERA" />
- <uses-feature android:name="android.hardware.camera" />
- <uses-feature android:name="android.hardware.camera.autofocus" />
-
- <uses-sdk
- android:minSdkVersion="7"
- android:targetSdkVersion="16" />
-
- <application
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:theme="@style/AppTheme" >
- <activity
- android:name="com.capture.MainActivity"
- android:label="@string/app_name" >
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
-
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
-
- </manifest>
When you click the button:
Step 6
After capturing the image:
Step 7
When you press on the button to crop: