2013-04-04 62 views
1

我有以下代码供用户裁剪图像。当我将尺寸设置为256以上时,它不起作用。我的直觉是“cropIntent.putExtra(”return-data“,true);”导致错误。如何将uri传递给cropIIntent并从onActivityResults中检索出来?换句话说,在裁剪和检索后保存图像。Android作物图像大小

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(mImageCaptureUri, "image/*"); 
     //set crop properties 
     cropIntent.putExtra("crop", "true"); 
     //indicate aspect of desired crop 
     cropIntent.putExtra("aspectX", 4); 
     cropIntent.putExtra("aspectY", 3); 
     //indicate output X and Y 
     cropIntent.putExtra("outputX", 256); 
     cropIntent.putExtra("outputY", 256); 
     //retrieve data on return 
     cropIntent.putExtra("return-data", true); 

     startActivityForResult(cropIntent, PIC_CROP); 

    } //respond to users whose devices do not support the crop action 
    catch (ActivityNotFoundException anfe) { 
     //display an error message 
     String errorMessage = "Your device doesn't support the crop action!"; 
     Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT); 
     toast.show(); 
    } 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

     if (requestCode == PIC_CROP) { 
      try { 
       final TextView imgTv = (TextView) findViewById(R.id.imageInfo); 
       Bundle extras = data.getExtras(); 
       thumbnail = extras.getParcelable("data"); 
       ImageView image = (ImageView) findViewById(R.id.pestImage); 
       image.setImageBitmap(thumbnail); 
     File f = new File(mImageCaptureUri.getPath()); 
     if (f.exists()) { 
      f.delete(); 
     } 
    } 
}//end onactivity results 

回答

6
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(mImageCaptureUri, "image/*"); 
     //set crop properties 
     cropIntent.putExtra("crop", "true"); 
     //indicate aspect of desired crop 
     cropIntent.putExtra("aspectX", 4); 
     cropIntent.putExtra("aspectY", 3); 
     //indicate output X and Y 
     cropIntent.putExtra("outputX", 800); 
     cropIntent.putExtra("outputY", 800); 

    File f = new File(Environment.getExternalStorageDirectory(), 
      "/temporary_holder.jpg"); 
     try { 
      f.createNewFile(); 
     } catch (IOException ex) { 
     Log.e("io", ex.getMessage()); 
     } 

uri = Uri.fromFile(f); 

     cropIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri); 

     startActivityForResult(cropIntent, PIC_CROP); 

    } //respond to users whose devices do not support the crop action 
    catch (ActivityNotFoundException anfe) { 
     //display an error message 
     String errorMessage = "Your device doesn't support the crop action!"; 
     Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT); 
     toast.show(); 
    } 
} 

onActivityResult

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

     if (requestCode == PIC_CROP) { 

        String filePath = Environment.getExternalStorageDirectory() 
         + "/temporary_holder.jpg"; 

       thumbnail = BitmapFactory.decodeFile(filePath); 



         //thumbnail = BitmapFactory.decodeFile(filePath); 
       // Log.i("",String.valueOf(thumbnail.getHeight())); 

        ImageView image = (ImageView) findViewById(R.id.pestImage); 
        image.setImageBitmap(thumbnail); 
        }} 
0

尝试

Uri cropedImageUri = data.getData(); 

String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

       Cursor cursor = getContentResolver().query(cropedImage, 
         filePathColumn, null, null, null); 
       cursor.moveToFirst(); 

       int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
       String filePath = cursor.getString(columnIndex); 
       cursor.close(); 

现在,filepath是路径裁剪图像

从文件路径使用负载位

private Bitmap loadImageFromSDCard(String filePath) { 

     BitmapFactory.Options bfo = new BitmapFactory.Options(); 
     bfo.inSampleSize = 1; 
     bfo.outWidth = 100; 
     bfo.outHeight = 100; 
     Bitmap photo = BitmapFactory.decodeFile(filePath, bfo); 
     return photo; 
    } 
+0

我不需要URI传递到cropIntent?当我得到filePath时,我该如何转换为位图? – user903772 2013-04-04 10:01:34

+0

你能提供更多的细节吗? – user903772 2013-04-04 10:49:29

+0

我认为你不需要传递一个Uri,看看resultCode是否成功,我添加了从文件路径加载位图的代码。 – 2013-04-04 12:23:27

0
if (android.os.Build.VERSION.SDK_INT > 10){ 
     Intent cropIntent = new Intent("com.android.camera.action.CROP"); 
     cropIntent.setDataAndType(picUri, "image/*"); 
     cropIntent.putExtra("crop", "true"); 
     int gcd = BigInteger.valueOf(ImageWidth). 
       gcd(BigInteger.valueOf(ImageHeight)).intValue(); 
     cropIntent.putExtra("aspectX", (ImageWidth/gcd)); 
     cropIntent.putExtra("aspectY", (ImageHeight/gcd)); 
     cropIntent.putExtra("outputX", ImageWidth); // X 
     cropIntent.putExtra("outputY", ImageHeight); // Y 
     cropIntent.putExtra("return-data", true); 
     cropIntent.setData(picUri); 
     startActivityForResult(cropIntent, PIC_CROP_INTENT_ID); 
    }