web-dev-qa-db-ja.com

固定サイズの画像をAndroid

画像を切り抜こうとしていますが、切り抜いた領域を正確に640px x640pxに設定できるようにしたいと思います。ユーザーが非常に小さな領域に切り取られないようにしたい。したがって、基本的には、トリミング領域の高さと幅を固定することをお勧めします。私はいくつかのサードパーティライブラリを調べましたが、この問題を解決することはできません。これどうやってするの?

enter image description here

15
toobsco42

私はこれらの解決策の1つを使用します:

  1. https://github.com/jdamcd/Android-crop
  2. https://github.com/edmodo/cropper

どちらも問題を解決するのに適切であり、より安定して信頼性を高めるために、より多くのEdgeケース、デバイス、その他のAndroidのものを確実にカバーするようです。

編集:
_Android-crop_にいくつかの変更を加え、withFixedSize(int width, int height)を使用して固定トリミング領域をピクセル単位で設定できるようになりました。

次のようになります:

_ private void beginCrop(Uri source) {
        Uri outputUri = Uri.fromFile(new File(getCacheDir(), "cropped"));
        new Crop(source).output(outputUri).withFixedSize(640, 640).start(this);
    }
_

これが プルリクエストです。

私のgithubで完全なコードを確認してください https://github.com/mklimek/Android-crop/tree/newfeature_fied_size_crop

ビルドのクローンを作成して、後でプロジェクトに追加できます。

それがあなたを助けることを願っています。

17
klimat

使用できる方法がありますÆ

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(selectedImage, "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", 640);
        cropIntent.putExtra("outputY", 640);
        //retrieve data on return
        cropIntent.putExtra("return-data", true);
        //start the activity - we handle returning in onActivityResult
        startActivityForResult(cropIntent, PIC_CROP);
    }
    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();
    }
}

コードのこの部分は、あなたが興味を持っているものです。

        cropIntent.putExtra("outputX", 640);
        cropIntent.putExtra("outputY", 640);

次のようにcropメソッドを呼び出す必要があります。

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

        selectedImage = data.getData();
        performCrop();

    } 

    if (requestCode == UPLOAD && resultCode == RESULT_OK) {
        selectedImage = data.getData();
        performCrop();
    }

    if (requestCode == PIC_CROP && resultCode == RESULT_OK){
        Bundle extras = data.getExtras();
        //get the cropped bitmap
        Bitmap thePic = extras.getParcelable("data");

        // Do what you want to do with the pic here
    }



}
4
SteBra