2014-12-16 12 views
14

Bir resmi kırpmaya çalışıyorum ancak kırpılmış alanı tam olarak 640 piksel x 640 piksel olacak şekilde ayarlamak istiyorum. Bir kullanıcının gerçekten küçük bir alana doğru kırpmasını önlemek istiyorum. Yani temel olarak, kırpma alanı için sabit bir yükseklik ve genişliğe sahip olmayı tercih ederim. Birçok üçüncü parti kütüphaneye baktım ama bu problemi çözmüyorum. Bunu nasıl yapabilirim?Android'de sabit boyutlu bir resmi kırpın

enter image description here

+3

"Bunu nasıl yapabilirim?" - kütüphanelerden birini kullanarak başlayın ve istediğiniz özelliği dahil etmek için değiştirin. – CommonsWare

+0

@CommonsWare Yaptım. Cevabımı kontrol edin ve ne demek istediğinizi oylayın :) – mklimek

cevap

4

bir yöntem

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(); 
    } 
} 

Kodun bu bölümü useÆ olabilir Orada ilgilenen youøre olan şey:

: Böyle mahsul yöntemi çağırmalıdır
 cropIntent.putExtra("outputX", 640); 
     cropIntent.putExtra("outputY", 640); 

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 
    } 



} 
+0

Ancak bu, kırpma penceresini düzeltmez. Yine de yeniden boyutlandırılabilir. – toobsco42

+0

(true "scaleUpIfNeeded"() gerçek bir "ölçek",) .putExtra .putExtra uğraşmak durumunda doğru/yanlış çeşitlemeleri – SteBra

+0

deneyin ne olduğunu çok SteBra, ancak hiçbir şans çalıştı. – toobsco42

14

Ben bu çözümlerden biri kullanırsınız:

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

ikisi de sorunu çözmek için uygun görünmektedir ve emin fazla sınır durumları, cihazları ve diğer Android şeyler kapak için sadece daha kararlı ve güvenilir olmak için.

DÜZENLEME:
Ben android-crop birkaç değişiklik tanıtıldı ve şimdi piksel olarak sabit kırpma alanını ayarlamak için withFixedSize(int width, int height) kullanabilirsiniz.

bu gibi görünüyor:

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

İşte bu benim github https://github.com/mklimek/android-crop/tree/newfeature_fied_size_crop bir pull request.

kontrol tam kod.

Oluşturun ve daha sonra projenize ekleyebilirsiniz.

Size yardımcı olacağını umuyorum.

+0

Ayrıca bu iki kitaplığı denedim, ancak hiçbirinde sabit bir kırpma penceresi yok. – toobsco42

+3

@ toobsco42 Cevabımı düzenledim ve sorununuzu çözeceğini düşünüyorum. – mklimek

+0

@ toobsco42, beklediğim gibi çalışmamı yapıyor mu? – mklimek

İlgili konular