2013-12-23 100 views
0

即時通訊實現從用戶單元庫中獲取圖片的一段代碼,但我希望用戶能夠使用Android默認裁剪UI裁剪圖像,因此我使用的代碼如下:獲取圖像裁剪

Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
    intent.putExtra("crop", "true"); 
    intent.putExtra("aspectX", 1); 
    intent.putExtra("aspectY", 1); 
    intent.putExtra("outputX", 280); 
    intent.putExtra("outputY", 280); 
    intent.putExtra("scale", true); 
    startActivityForResult(intent , RESULT_CODE_PICK_FROM_LIBRARY); 

,並獲得該圖像返回我使用的onActivityResult代碼:

Uri selectedImage = data.getData(); 
String tempPath = getPath(selectedImage); 
Bitmap pickedImage = BitmapFactory.decodeFile(tempPath); 

的getPath():

private String getPath(Uri uri) { 
    String[] projection = { MediaStore.Images.Media.DATA }; // MediaColumns.DATA // MediaStore.Images.Media.DATA 
    Cursor cursor = getContentResolver().query(uri, projection, null, null, null); 
    if (cursor != null) { 
     cursor.moveToFirst(); 
     int columnIndex = cursor.getColumnIndex(projection[0]); 
     String filePath = cursor.getString(columnIndex); 
     cursor.close(); 
     return filePath; 
    } else { 
     return null; 
    } 
} 

但我得到一個空指針異常的線:

Cursor cursor = getContentResolver().query(uri, projection, null, null, null); 

有沒有人有任何線索呢? 此外,將代碼是拍照,呈現選項來裁剪,然後檢索簡單的圖像的..沒有必要對原始文件..

感謝, 牛頓

回答

1

Tutorial正是你需要享受什麼:

裁剪圖像意圖挑動作後 enter image description here

+0

感謝您的建議,但本教程將拍攝的照片保存到文件中,並且我不需要這些,我只需要小尺寸的照片即可使用......此外,它還使用無證/私密代碼(com.android。 camera.action.CROP),可能很快就會失去支持,並且不適用於每個設備/ osVersions! –

1

使用此功能可裁剪位圖

public static Bitmap getCroppedBitmap(Bitmap bmp, int radius) { 
    Bitmap sbmp; 
    if(bmp.getWidth() != radius || bmp.getHeight() != radius) 
     sbmp = Bitmap.createScaledBitmap(bmp, radius, radius, false); 
    else 
     sbmp = bmp; 
    Bitmap output = Bitmap.createBitmap(sbmp.getWidth(), 
      sbmp.getHeight(), Config.ARGB_8888); 
    Canvas canvas = new Canvas(output); 

    final int color = 0xffa19774; 
    final Paint paint = new Paint(); 
    final Rect rect = new Rect(0, 0, sbmp.getWidth(), sbmp.getHeight()); 

    paint.setAntiAlias(true); 
    paint.setFilterBitmap(true); 
    paint.setDither(true); 
    canvas.drawARGB(0, 0, 0, 0); 
    paint.setColor(Color.parseColor("#BAB399")); 
// canvas.drawCircle(sbmp.getWidth()/2+0.7f, sbmp.getHeight()/2+0.7f, 
//   sbmp.getWidth()/2+0.1f, paint); 
    canvas.drawCircle(sbmp.getWidth()/2, sbmp.getHeight()/2, 
      (sbmp.getWidth()/2), paint); 
    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 
    canvas.drawBitmap(sbmp, rect, rect, paint); 


      return output; 
} 
+0

我有代碼來裁剪圖像,但如果圖像不是正方形,它將失去寬高比..所以我想實現Android默認裁剪UI ..任何想法如何? –