我遵循本教程:http://mobile.tutsplus.com/tutorials/android/capture-and-crop-an-image-with-the-device-camera/
我正在尝试创建一个简单的活动,其中包含" take picture
" Button
和ImageView
,只需拍照,然后打开Android内置的裁剪活动。我可以毫无意外地打开相机,但是,在拍摄照片时,代码不会将照片发送到裁剪活动。
调用裁剪活动时似乎崩溃了。我不确定为什么会这样;我完全按照这个例子(除了我不需要的开始XML的东西),我查看了代码,一切似乎都有意义。我确定这是造成这种情况的一个小错误。这是我的活动代码:
package com.example.project;
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.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
public class ImageChoose extends Activity implements OnClickListener {
//keep track of camera capture intent
final int CAMERA_CAPTURE = 1;
//captured picture uri
private Uri picUri;
final int PIC_CROP = 2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image_choose);
Button takePicture = (Button)findViewById(R.id.takePicture);
takePicture.setOnClickListener(this);
}
public void onClick(View v) {
if (v.getId() == R.id.takePicture){
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 = "Your device doesn't support photos!";
Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT);
toast.show();
}
}
}
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){
//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
picView.setImageBitmap(thePic);
}
}
}
private void performCrop(){
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);
}catch(ActivityNotFoundException anfe){
String errorMessage = "Your device doesn't support photo cropping!";
Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT);
toast.show();
}
}
}
答案 0 :(得分:7)
我使用过这种类型的动作。这是我的代码,其中包含以下链接: - Detail Description
我希望这会对你有所帮助。我建议你注意以下几行: -
Intent camera=new Intent();
camera.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
camera.putExtra("crop", "true");
答案 1 :(得分:0)
裁剪活动是Android相机应用程序的一部分。它可能在您的设备上提供,也可能不提供,尤其是在使用自定义/供应商相机应用时。如果您希望它可靠地工作,您必须获取裁剪器的代码并将其合并到您自己的应用程序中。
答案 2 :(得分:-1)
private void performCrop(){
}
Inside this method we are going to call an Intent to perform the crop, so let’s add “try” and “catch” blocks in case the user device does not support the crop operation:
try {
}
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();
}
//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);
//keep track of cropping intent
final int PIC_CROP = 2;