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 callled 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>
Step 4
Output
Step 5
When you click the button:
Step 6
After capturing the image:
Step 7
When you press on the button to crop: