画像を切り抜こうとしていますが、切り抜いた領域を正確に640px x640pxに設定できるようにしたいと思います。ユーザーが非常に小さな領域に切り取られないようにしたい。したがって、基本的には、トリミング領域の高さと幅を固定することをお勧めします。私はいくつかのサードパーティライブラリを調べましたが、この問題を解決することはできません。これどうやってするの?
私はこれらの解決策の1つを使用します:
どちらも問題を解決するのに適切であり、より安定して信頼性を高めるために、より多くの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 。
ビルドのクローンを作成して、後でプロジェクトに追加できます。
それがあなたを助けることを願っています。
使用できる方法がありますÆ
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
}
}