2

我正在关注本教程: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();
    }
  }

  }
4

3 回答 3

7

我使用过这种类型的操作。这是我的代码,带有以下链接:-详细说明

我希望这会对您有所帮助。我建议您关注以下几行:-

Intent camera=new Intent();
camera.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
camera.putExtra("crop", "true");
于 2012-11-26T13:16:50.023 回答
0

裁剪活动是库存 Android 相机应用程序的一部分。它可能在您的设备上可用,也可能不可用,尤其是在您使用自定义/供应商相机应用程序时。如果您希望它可靠地工作,您必须获取裁剪器的代码并将其合并到您自己的应用程序中。

于 2012-11-26T08:50:18.550 回答
-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;
于 2012-11-26T13:23:18.377 回答