百度搜一下大部分的文章都是使用了类似如下的方法进行裁剪

private void startPhotoZoom(Uri uri, int size) {

Intent intent = new Intent("com.android.camera.action.CROP");

intent.setDataAndType(uri, "image/*");

// crop为true是设置在开启的intent中设置显示的view可以剪裁

intent.putExtra("crop", "true");

// aspectX aspectY 是宽高的比例

intent.putExtra("aspectX", 1);

intent.putExtra("aspectY", 1);

// outputX,outputY 是剪裁图片的宽高

intent.putExtra("outputX", size);

intent.putExtra("outputY", size);

intent.putExtra("return-data", true);

startActivityForResult(intent, Constant.PHOTO_REQUEST_CUT);

}

private void setPicToView(Intent picdata) {

Bundle bundle = picdata.getExtras();

if (bundle != null) {

// 获取返回的Bitmap对象

Bitmap photo = bundle.getParcelable("data");

if (photo != null) {

// 显示bitmap

}

}

}

但是在实际使用中发现,裁剪的尺寸不能太大,尤其在一些低端配置的手机上,size可能得在300甚至200以内,否则就会报错。这个是因为android内部机制导致。intent 传输的extra data大小有限制。那么我们如何裁剪出大图片呢。这就需要我们intent使用Uri进行传值了而不是传递bitmap。

将方法进行如下调整

private void startPhotoZoom(Uri uri, int size) {

Intent intent = new Intent("com.android.camera.action.CROP");

intent.setDataAndType(uri, "image/*");

// crop为true是设置在开启的intent中设置显示的view可以剪裁

intent.putExtra("crop", "true");

// aspectX aspectY 是宽高的比例

intent.putExtra("aspectX", 1);

intent.putExtra("aspectY", 1);

// outputX,outputY 是剪裁图片的宽高

intent.putExtra("outputX", size);

intent.putExtra("outputY", size);

intent.putExtra("return-data", false);   // 不返回bitmap

intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);  // 图片裁剪后保存的地方

intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());

startActivityForResult(intent, Constant.PHOTO_REQUEST_CUT);

}

我们需要定义一个临时的文件存储裁剪后的图片

File tempFile = new File(filepath);

Uri imageUri = Uri.fromFile(tempFile);

onactivityResult 中处理

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

super.onActivityResult(requestCode, resultCode, data);

switch (requestCode) {

case Constant.PHOTO_REQUEST_TAKEPHOTO:

startPhotoZoom(imageUri), 500);

break;

case Constant.PHOTO_REQUEST_CUT:

setPicToView();

break;

}

}

private void setPicToView() {

if (imageUri != null) {

// 获取返回的Bitmap对象

Bitmap photo = BitmapUtils.decodeUriAsBitmap(mContext, imageUri);

if (photo != null) {

// 显示bitmap

}

}

}

将Uri转成bitmap的方法:

public static Bitmap decodeUriAsBitmap(Context context, Uri uri) {

Bitmap bitmap = null;

try {

bitmap = BitmapFactory.decodeStream(context.getContentResolver()

.openInputStream(uri));

} catch (FileNotFoundException e) {

e.printStackTrace();

return null;

}

return bitmap;

}

参考文章:http://www.linuxidc.com/Linux/2012-11/73940p2.htm

android裁剪图片不清晰,Android 拍照裁剪图片不清晰解决办法相关推荐

  1. android intent拍照,Android通过Intent方式调用相机拍照取得图片

    Android通过Intent方式调用相机拍照取得图片 AndroidManifest.XML 权限设置: XML布局设置: 代码: public classMainActivityextendsAp ...

  2. Android Studio 编译异常Could not execute build using Gradle installation解决办法

    Android Studio 编译异常Could not execute build using Gradle installation解决办法 参考文章: (1)Android Studio 编译异 ...

  3. Android编译出现com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536错误解决办法

    踩过的坑, 以下操作,必须在app module中进行. ========================================== ** Android编译出现com.android.de ...

  4. android mkdirs 不起作用,android设置铃声的时候f.mkdirs()创建不了?解决办法

    当前位置:我的异常网» Android » android设置铃声的时候f.mkdirs()创建不了?解决办法 android设置铃声的时候f.mkdirs()创建不了?解决办法 www.myexce ...

  5. Android Studio运行手机框很大 屏幕很小的解决办法

    关于Android Studio运行手机框很大 屏幕很小的解决办法 才开始接触移动软件开发,按照Android Studio安装教程相关博客安装过后,发生如图问题: 可以发现模拟器运行出来的结果是屏幕 ...

  6. Unity for IOS 加载手机相册图片以及打开相机拍照获取图片

    Unity for IOS 加载手机相册图片以及打开相机拍照获取图片 最近想做一个使用unity for IOS获取手机图片的功能,所以就研究了一下 这里我们需要创建两个objective-c文件,最 ...

  7. android 4.0以上WebView不能全屏播放视频的解决办法

    上次鄙人做了一个简单的利用webView实现的一个浏览器!其中遇到了两个问题,一个是将浏览器中需要下载的内容托管到系统默认的下载程序进行下载,这个比较简单就不在这里讨论了:另一个问题就是我们的Andr ...

  8. Android Studio安装插件提示was not installed: Cannot download的解决办法(仅限AS2.2版本以上)

    这是报错消息: Plugin Android ButterKnife Plugin Plus was not installed: Cannot download 'http://plugins.je ...

  9. eclipse运行android程序,总是启动一个新的AVD模拟器,解决办法

    问题描述: 明明有一个AVD在运行,但是在运行Android程序的时候,却会重新启动一个AVD,再次运行,再次启动新的,给出的提示为:No active compatible AVD's or dev ...

  10. Android之jni编译出现error: jump to label ‘XXXX’ [-fpermissive]解决办法

    1.问题 Android jni里面编写C++代码的时候,我就写了个goto语句,特么也提示下面的错误 error: jump to label 'XXXX' [-fpermissive] 这不是日了 ...

最新文章

  1. 496.下一个更大元素I
  2. Javascript 中变更Html标签label的文本
  3. 安装electron-react-boilerplate遇到的问题
  4. 大数据_Flink_数据处理_运行时架构7_程序结构和数据流图---Flink工作笔记0022
  5. C++ 动态联编实现原理分析
  6. 那些你不可错过的Java博客
  7. 错误: 找不到符号 符号: 类 ActivityMainBindingImpl
  8. 【解决】Yandex浏览器Bing搜索遭遇trovi.com劫持
  9. 机器学习实战-54: 集成学习分类算法(ada-boost)
  10. 【毕业设计】基于单片机的心率检测系统 - stm32 物联网 嵌入式
  11. 互联网快讯:腾讯新闻上线数字藏品馆;极米多款产品受消费者青睐;微信更新IOS系统朋友圈可发20张图片
  12. Git 远程篇之查看远程仓库信息
  13. Spring Boot入门-快速搭建网页
  14. configure文件的生成
  15. 聚类方法:DBSCAN算法研究(1)--DBSCAN原理、流程、参数设置、优缺点以及算法
  16. js判断数组,对象,是否为空,是否含有某个值,判断数组中对象是否有某个值
  17. HEVC参考软件HM的使用
  18. 整行读入,空格分割;数字与字符串混合读入;String转int
  19. Android Studio 的ListView 的用法
  20. windows生成文件MD5值

热门文章

  1. 悲情陨落的十大民族品牌
  2. salesforce工作中常用的formula用法汇总
  3. 2021 | VMware ESX虚拟机
  4. SQL:with ties
  5. 信号隔离器直流电流电压变送器 分配转换模块0-10V一进二出4-20mA
  6. 带你通关全栈树型结构设计:从数据库到前端
  7. 面向协议编程,灵丹妙药或是饮鸩止渴?
  8. 中国经济刺激计划将提振大宗商品
  9. mysql备份文件如何还原数据库文件_数据库备份文件还原方法
  10. 【基于狂神Docker双响曲】:1、Docker入门及常用部署