android调用原生图片裁剪后图片尺寸缩放的解决方法

 更新时间:2017年03月02日 16:10:19   作者:bluejww  
这篇文章主要为大家详细介绍了android调用原生图片裁剪后图片尺寸缩放的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

在安卓开发中,如果对拍照后的图片进行图片裁剪,如果是调用系统的裁剪,如下:

/* 
  * 裁剪图片 
  */ 
 private void cropPhoto() { 
 
  Intent intent = new Intent("com.android.camera.action.CROP"); 
  Uri uri = Uri.parse("file://" + picSavePath); 
  intent.setDataAndType(uri, "image/*"); 
  intent.putExtra("crop", "true"); 
  // intent.putExtra("aspectX", 3); 
  // intent.putExtra("aspectY", 2); 
  intent.putExtra("outputX", cropX); 
  intent.putExtra("outputY", cropY); 
  intent.putExtra("scale", "true"); 
  intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); 
  intent.putExtra("return-data", "false"); 
  intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); 
  intent.putExtra("noFaceDetection", "true"); // no face detection 
  startActivityForResult(intent, CROP_PICTURE); 
 } 

这样,就开始对图片进行裁剪了,但是这样会有一个问题,当裁剪框选择的图片与录入的cropX,xropY的形状不同时,比如传入的参数值是个w>h的长方形,而选择框选择的是w<h的长方形时,这样会导致裁剪的图片结果会被压缩变形。

为了解决压缩变形的问题,我的思路是这样的:

1,先对图片进行裁剪,不设置默认的裁剪图片尺寸。

2.对裁剪后的图片再进行图片的缩放。缩放是采角的矩阵的方式进行的缩放

代码如下:

1.

/* 
  * 裁剪图片, 
  */ 
 private void cropPhotoAndZoom() { 
 
  Intent intent = new Intent("com.android.camera.action.CROP"); 
  Uri uri = Uri.parse("file://" + picSavePath); 
  intent.setDataAndType(uri, "image/*"); 
  intent.putExtra("crop", "true"); 
  intent.putExtra("scale", "true"); 
  intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); 
  intent.putExtra("return-data", "false"); 
  intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); 
  intent.putExtra("noFaceDetection", "true"); // no face detection 
  startActivityForResult(intent, CROP_PICTURE_ANDZOOM); 
 } 

2.

/** 
  * 裁剪后,根据裁剪框的长宽比,同时根据图片的需求缩放尺寸进行缩放 
  * 
  * @param path 
  * @param x 
  *   原始的需求尺寸width 
  * @param y 
  *   heiht 
  * @return 
  */ 
 public static Bitmap toBigZoom(String path, float x, float y) { 
  Log.e("bitmaputil", "path---" + path + "--x--y--" + x + "--" + y); 
  Bitmap bitmap = BitmapFactory.decodeFile(path); 
  if (bitmap != null) { 
 
   int w = bitmap.getWidth(); 
   int h = bitmap.getHeight(); 
   float sx = 0; 
   float sy = 0; 
   if ((float) w / h >= 1) { 
    sx = (float) y / w; 
    sy = (float) x / h; 
    Log.e("bitmaputil---", "w/h--->=1"); 
   } else { 
    sx = (float) x / w; 
    sy = (float) y / h; 
    Log.e("bitmaputil---", "w/h---<1"); 
   } 
   Matrix matrix = new Matrix(); 
   matrix.postScale(sx, sy); // 长和宽放大缩小的比例 
   Bitmap resizeBmp = Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true); 
   Log.e("bitmaputil---", "w---" + resizeBmp.getWidth() + "h--" + resizeBmp.getHeight()); 
   return resizeBmp; 
  } 
 
  return null; 
 } 

2中代码,通过判断裁剪框的w,h比来设置图片是放大是横向放大,还是竖向放大,放大后的效果基本上能满足需求。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Service与Activity之间的通信(同一进程)

    Service与Activity之间的通信(同一进程)

    这篇文章主要介绍了Service与Activity之间的通信(同一进程)的相关资料,需要的朋友可以参考下
    2016-03-03
  • Android如何使用GestureDetector进行手势检测详解

    Android如何使用GestureDetector进行手势检测详解

    GestureDetector使用很方便,提供了单击,双击,长按等操作的处理,但是一般的定义界面都比较复杂,还用很多需要注意的地方,这篇文章主要给大家介绍了关于Android如何使用GestureDetector进行手势检测的相关资料,需要的朋友可以参考下
    2022-01-01
  • Android开发使用PopupMenu创建弹出式菜单完整实例

    Android开发使用PopupMenu创建弹出式菜单完整实例

    这篇文章主要介绍了Android开发使用PopupMenu创建弹出式菜单,结合完整实例形式分析了Android基于PopupMenu对象创建的弹出式菜单相关操作技巧与注意事项,需要的朋友可以参考下
    2019-03-03
  • android图像绘制(一)多种方法做图像镜像

    android图像绘制(一)多种方法做图像镜像

    在android中做图像镜像有很多方法,今天算是学习了,感兴趣的朋友可以参考下
    2013-01-01
  • Android编程之listView中checkbox用法实例分析

    Android编程之listView中checkbox用法实例分析

    这篇文章主要介绍了Android编程之listView中checkbox用法,结合实例形式分析了Android中checkbox的页面布局及功能实现相关技巧,需要的朋友可以参考下
    2016-01-01
  • ListView滑动隐藏显示ToolBar的实例

    ListView滑动隐藏显示ToolBar的实例

    下面小编就为大家分享一篇ListView滑动隐藏显示ToolBar的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • Android中两个类让你再也不用实现onActivityResult()

    Android中两个类让你再也不用实现onActivityResult()

    这篇文章主要给大家介绍了关于Android中两个类让你再也不用实现onActivityResult()的相关资料,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面来一起看看吧
    2018-08-08
  • Android中HttpURLConnection类使用介绍

    Android中HttpURLConnection类使用介绍

    早些时候其实我们都习惯性使用HttpClient,但是后来Android6.0之后不再支持HttpClient,需要添加Apache的jar才行,所以,就有很多开发者放弃使用HttpClient了,HttpURLConnection毕竟是标准Java接口(java.net) ,适配性还是很强的
    2022-12-12
  • Android判断json格式将错误信息提交给服务器

    Android判断json格式将错误信息提交给服务器

    今天小编就为大家分享一篇关于Android判断json格式将错误信息提交给服务器,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Android调用手机摄像头的方法

    Android调用手机摄像头的方法

    这篇文章主要为大家详细介绍了Android调用手机摄像头的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03

最新评论