竖屏拍照,但是sd卡中却是横屏解决方法
2015-08-31 12:03
357 查看
protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (resultCode) { case 1: if (data != null) { // 取得返回的Uri,基本上选择照片的时候返回的是以Uri形式,但是在拍照中有得机子呢Uri是空的,所以要特别注意 Uri mImageCaptureUri = data.getData(); // 返回的Uri不为空时,那么图片信息数据都会在Uri中获得。如果为空,那么我们就进行下面的方式获取 if (mImageCaptureUri != null) { setImage(mImageCaptureUri);// 根据Uri处理并显示图片 } } break; default: break; } }
setImage方法里面对图片进行旋转
private void setImage(Uri mImageCaptureUri) { // 不管是拍照还是选择图片每张图片都有在数据中存储也存储有对应旋转角度orientation值 // 所以我们在取出图片是把角度值取出以便能正确的显示图片,没有旋转时的效果观看 ContentResolver cr = this.getContentResolver(); Cursor cursor = cr.query(mImageCaptureUri, null, null, null, null);// 根据Uri从数据库中找 if (cursor != null) { cursor.moveToFirst();// 把游标移动到首位,因为这里的Uri是包含ID的所以是唯一的不需要循环找指向第一个就是了 String filePath = cursor.getString(cursor.getColumnIndex("_data"));// 获取图片路 String orientation = cursor.getString(cursor .getColumnIndex("orientation"));// 获取旋转的角度 cursor.close(); if (filePath != null) { Bitmap bitmap = BitmapFactory.decodeFile(filePath);//根据Path读取资源图片 int angle = 0; if (orientation != null && !"".equals(orientation)) { angle = Integer.parseInt(orientation); } if (angle != 0) { // 下面的方法主要作用是把图片转一个角度,也可以放大缩小等 Matrix m = new Matrix(); int width = bitmap.getWidth(); int height = bitmap.getHeight(); m.setRotate(angle); // 旋转angle度 bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, m, true);// 从新生成图片 } photo.setImageBitmap(bitmap); } } }
如果获取不到uri,可以尝试直接将bitmap传到方法里进行操作
相关文章推荐
- 并发控制 mysql InnoDB表锁
- zabbix监控环境的搭建(server端)
- 刷背包之01背包- HDU 2602
- LeetCode:Linked List Cycle II
- jQuery实现鼠标滑过点击事件音效试听
- js实现仿百度风云榜可重复多次调用的TAB切换选项卡效果
- 栈的应用:后缀表达式到中缀表达式的转换
- Oracle_如何从数据库 11.2 降级至之前的版本(包括 11.2.0.3-11.2.0.1)
- C++ 各种全局常量的声明方式的优缺点?
- WPF comboBox内字体选择器的简单使用
- CocoaAsyncSocket 文档3:介绍GCDAsyncSocket
- 仿QQ消息提示小圆点---启发demo
- windows系统卸载程序不彻底,系统服务中有残留如何删除
- 矢量图网站
- Coursera-C程序设计进阶-编程题#1:单词翻转
- 梯度检验!
- 一道让人蛋疼的面试题
- Android Camera open流程
- 8 - String to Integer (atoi)
- hibernate一对多关联映射—单向