简体   繁体   English

如何在 Android 中以编程方式裁剪和旋转图像?

[英]How can I crop and rotate image programmatically in Android?

I want to rotate the image by 90 degree and also want to crop the image taken out from gallery of phone.我想将图像旋转 90 度,还想裁剪从手机图库中取出的图像。 How can I do this operation programmatically in Android?如何在 Android 中以编程方式执行此操作?

To perform the rotation of the image you can have the following code:要执行图像的旋转,您可以使用以下代码:

Bitmap bMap = BitmapFactory.decodeResource(getResources(),R.drawable.test);
Matrix mat = new Matrix();
mat.postRotate(90);
Bitmap bMapRotate = Bitmap.createBitmap(bMap, 0, 0,
                             bMap.getWidth(), bMap.getHeight(), mat, true);
BitmapDrawable bmd = new BitmapDrawable(bMapRotate);
image.setImageBitmap(bMapRotate);
image.setImageDrawable(bmd);

and for image cropping taken from gallery use the following snippet of code:对于从图库中截取的图像,请使用以下代码片段:

    Intent viewMediaIntent = new Intent();
    viewMediaIntent.setAction(android.content.Intent.ACTION_VIEW);
    File file = new File("/image/*");    
    viewMediaIntent.setDataAndType(Uri.fromFile(file), "image/*");   
    viewMediaIntent.putExtra("crop","true");
    viewMediaIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    startActivityForResult(viewMediaIntent,1);

Hope, this will be helpful for you.希望,这将对您有所帮助。

Try the following code to crop the selected image from the gallary.尝试使用以下代码从图库中裁剪选定的图像。

 private static final String TEMP_PHOTO_FILE = "temporary_holder.jpg";  

 Intent photoPickerIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
 photoPickerIntent.setType("image/*");
 photoPickerIntent.putExtra("crop", "true");
 photoPickerIntent.putExtra(MediaStore.EXTRA_OUTPUT, getTempUri());
 photoPickerIntent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
 startActivityForResult(photoPickerIntent, REQ_CODE_PICK_IMAGE);


private Uri getTempUri() {
return Uri.fromFile(getTempFile());
}

private File getTempFile() {
if (isSDCARDMounted()) {

File f = new File(Environment.getExternalStorageDirectory(),TEMP_PHOTO_FILE);
try {
f.createNewFile();
} catch (IOException e) {

}
return f;
} else {
return null;
}
}

private boolean isSDCARDMounted(){
String status = Environment.getExternalStorageState();
if (status.equals(Environment.MEDIA_MOUNTED))
return true;
return false;
}




 protected void onActivityResult(int requestCode, int resultCode,
    Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);

switch (requestCode) {
case REQ_CODE_PICK_IMAGE:
    if (resultCode == RESULT_OK) {  
      if (imageReturnedIntent!=null){



           File tempFile = getTempFile();

          String filePath= Environment.getExternalStorageDirectory()
        + "/temporary_holder.jpg";
          System.out.println("path "+filePath);


Bitmap selectedImage =  BitmapFactory.decodeFile(filePath);
_image = (ImageView) findViewById(R.id.image);
_image.setImageBitmap(selectedImage );

 }
 }
 }

and also have a look at this Tutorial1 , tutorial2也看看这个Tutorial1 , tutorial2

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM