2013-01-18 55 views
0
public class ImageCroppMainActivity extends Activity implements OnClickListener{ 

final int CAMERA_CAPTURE = 1; 

//keep track of cropping intent 

final int PIC_CROP = 2; 

//captured picture uri 

private Uri picUri; 

final int PICK_IMAGE = 3; 

/** Called when the activity is first created. */ 

@Override 

public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_image_cropp_main); 

    //retrieve a reference to the UI button 

    Button captureBtn = (Button)findViewById(R.id.capture_btn); 

    //handle button clicks 

    captureBtn.setOnClickListener(this); 

    Button browseBtn = (Button)findViewById(R.id.browse_btn); 

    //handle button clicks 

    browseBtn.setOnClickListener(this); 

} 



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(); 

} 

} 

else if(v.getId() == R.id.browse_btn) 

{ 

//use standard intent to capture an image 

Intent intent = new Intent(Intent.ACTION_PICK, 

android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 

//we will handle the returned data in onActivityResult 

startActivityForResult(intent, PICK_IMAGE); 

} 

} 

/** 

* 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 
      MediaStore.Images.Media.insertImage(getContentResolver(), thePic, "" , ""); 

      picView.setImageBitmap(thePic); 

     } 

     else if(requestCode == PICK_IMAGE) 

     { 

picUri = data.getData(); 

      //carry out the crop operation 

      performCrop(); 

     }}} 

    /** 

* 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", "false"); 

     //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(); 

    } 

    } 

    } 

回答

1

它可以在只有3个步骤来完成 -

1)的Android清单文件

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="camera.test.demo" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk android:minSdkVersion="8" /> 

<application 
android:icon="@drawable/ic_launcher" 
android:label="@string/app_name" > 
<activity 
android:name=".SimpleCameraGalleryDemo" 
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> 

2)SimpleCameraGalleryDemo代码

package camera.test.demo; 
import android.app.Activity; 
import android.content.ActivityNotFoundException; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 

public class SimpleCameraGalleryDemo extends Activity { 
private static final int PICK_FROM_CAMERA = 1; 
private static final int PICK_FROM_GALLERY = 2; 
ImageView imgview; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 

imgview = (ImageView) findViewById(R.id.imageView1); 
Button buttonCamera = (Button) findViewById(R.id.btn_take_camera);`enter code here` 
Button buttonGallery = (Button) findViewById(R.id.btn_select_gallery); 
buttonCamera.setOnClickListener(new View.OnClickListener() { 

public void onClick(View v) { 
// call android default camera 
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

intent.putExtra(MediaStore.EXTRA_OUTPUT, 
MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString()); 
// ******** code for crop image 
intent.putExtra("crop", "true"); 
intent.putExtra("aspectX", 0); 
intent.putExtra("aspectY", 0); 
intent.putExtra("outputX", 200); 
intent.putExtra("outputY", 150); 

try { 

intent.putExtra("return-data", true); 
startActivityForResult(intent, PICK_FROM_CAMERA); 

} catch (ActivityNotFoundException e) { 
// Do nothing for now 
} 
} 
}); 
buttonGallery.setOnClickListener(new View.OnClickListener() { 

@Override 
public void onClick(View v) { 
// TODO Auto-generated method stub 
Intent intent = new Intent(); 
// call android default gallery 
intent.setType("image/*"); 
intent.setAction(Intent.ACTION_GET_CONTENT); 
// ******** code for crop image 
intent.putExtra("crop", "true"); 
intent.putExtra("aspectX", 0); 
intent.putExtra("aspectY", 0); 
intent.putExtra("outputX", 200); 
intent.putExtra("outputY", 150); 

try { 

intent.putExtra("return-data", true); 
startActivityForResult(Intent.createChooser(intent, 
"Complete action using"), PICK_FROM_GALLERY); 

} catch (ActivityNotFoundException e) { 
// Do nothing for now 
} 
} 
}); 
} 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

if (requestCode == PICK_FROM_CAMERA) { 
Bundle extras = data.getExtras(); 
if (extras != null) { 
Bitmap photo = extras.getParcelable("data"); 
imgview.setImageBitmap(photo); 

} 
} 

if (requestCode == PICK_FROM_GALLERY) { 
Bundle extras2 = data.getExtras(); 
if (extras2 != null) { 
Bitmap photo = extras2.getParcelable("data"); 
imgview.setImageBitmap(photo); 

} 
} 
} 
} 

3)主.xml文件

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 

<TextView 
android:id="@+id/textViewAddCard" 
android:layout_width="250dp" 
android:layout_height="50dp" 
android:text="Take Image" 
android:textSize="16dp" 
android:layout_gravity="center" 
android:gravity="center" 
android:typeface="sans"/> 

<Button 
android:id="@+id/btn_take_camera" 
android:layout_width="250dp" 
android:layout_height="50dp" 
android:text="Take From Camera" 
android:layout_marginTop="5dp" 
android:layout_gravity="center" 
android:typeface="sans"/> 

<Button 
android:id="@+id/btn_select_gallery" 
android:layout_width="250dp" 
android:layout_height="50dp" 
android:text="Select from Gallery" 
android:layout_marginTop="10dp" 
android:layout_gravity="center" 
android:typeface="sans" /> 
<ImageView 
android:id="@+id/imageView1" 
android:layout_gravity="center" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" /> 
</LinearLayout> 

我希望对你有帮助。

0

尝试添加到您的OnActivityResult

protected void onActivityResult(int requestCode, int resultCode, Intent 
data) { 
if (resultCode == RESULT_OK) { 

if(requestCode == CAMERA_CAPTURE){ 

picUri = data.getData(); 

performCrop(); 
} 
else if(requestCode == PIC_CROP){ 

Bundle extras = data.getExtras(); 

Bitmap thePic = extras.getParcelable("data"); 

ImageView picView = (ImageView)findViewById(R.id.picture); 

picView.setImageBitmap(thePic); 

OutputStream output; 
// Find the SD Card path 
File filepath = Environment.getExternalStorageDirectory(); 

// Create a new folder in SD Card 
File dir = new File(filepath.getAbsolutePath() 
+ "/CroppedImage/"); 
dir.mkdirs(); 

// Create a name for the saved image 
File file = new File(dir, "crop.jpg"); 

try { 

output = new FileOutputStream(file); 

// Compress into png format image from 0% - 100% 
thePic.compress(Bitmap.CompressFormat.JPEG, 100, output); 
output.flush(); 
output.close(); 

} 

catch (Exception e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 

} 
} 
} 
+0

请格式化代码并添加解释如何解决问题的解释。 – MikaS

+0

oww对不起!新来的。还不熟悉代码格式。我已经对代码发表了评论,我认为它解释了它是如何解决问题的。 – ArDev