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 に答える