android 拍照并将图片剪裁、压缩并显示
2015-12-21 16:01
441 查看
要在MainFest中加权限
<uses-permission android:name="android.permission.CAMERA"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
package com.xiaoqi.camerademo; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Environment; import android.provider.MediaStore; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.method.CharacterPickerDialog; import android.view.View; import android.widget.Button; import android.widget.ImageView; import java.io.ByteArrayOutputStream; import java.io.File; import java.util.Date; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button btn_pics, btn_take; private ImageView img; private static final String IMAGE_UNSPECIFIED = "image/*"; private static final int NONE = 0; private static final int PHOTO_GRAPH = 1;// 拍照 private static final int PHOTO_ZOOM = 2; // 缩放 private static final int PHOTO_RESOULT = 3;// 结果 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_pics = (Button) findViewById(R.id.btn_pics); btn_take = (Button) findViewById(R.id.btn_take); img = (ImageView) findViewById(R.id.image); btn_pics.setOnClickListener(this); btn_take.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { //选择图库的图片 case R.id.btn_pics: Intent intent1 = new Intent(Intent.ACTION_PICK, null); intent1.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_UNSPECIFIED); startActivityForResult(intent1, PHOTO_ZOOM); break; //调用相机拍照 case R.id.btn_take: Intent intent2 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent2.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment .getExternalStorageDirectory(), "temp.jpg"))); startActivityForResult(intent2, PHOTO_GRAPH); break; } } /** * 剪裁图片 * * @param uri */ public void startPhotoZoom(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, IMAGE_UNSPECIFIED); intent.putExtra("crop", "true"); // aspectX aspectY 是宽高的比例 intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); // outputX outputY 是裁剪图片宽高 intent.putExtra("outputX", 300); intent.putExtra("outputY", 500); intent.putExtra("return-data", true); startActivityForResult(intent, PHOTO_RESOULT); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == NONE) return; // 拍照 if (requestCode == PHOTO_GRAPH) { // 设置文件保存路径 File picture = new File(Environment.getExternalStorageDirectory() + "/temp.jpg"); startPhotoZoom(Uri.fromFile(picture)); } if (data == null) return; // 读取相册缩放图片 if (requestCode == PHOTO_ZOOM) { startPhotoZoom(data.getData()); } // 将图片压缩并且显示 if (requestCode == PHOTO_RESOULT) { Bitmap photo = (Bitmap) data.getExtras().get("data"); ByteArrayOutputStream stream = new ByteArrayOutputStream(); photo.compress(Bitmap.CompressFormat.JPEG, 75, stream);// (0-100)压缩文件 img.setImageBitmap(photo); //把图片显示在ImageView控件上 } super.onActivityResult(requestCode, resultCode, data); } }
相关文章推荐
- 如何将CM android移植到你的设备(二)
- android中实现时分秒显示
- 使用Socket做一个简单的下载器
- Android之Volley框架
- TextView的XML属性说明全析 ---Android基础篇
- Android开发艺术探索学习-View的事件分发机制(二)
- Android之的性能优化方法
- Android中图案锁的实现
- Android获取屏幕高度、状态栏高度、标题栏高度
- 关于Android中工作者线程的思考
- Android Intent机制
- Android Studio 中引入.so文件和引用.so文件
- Android开发实践:Java层与Jni层的数组传递
- Android中的内存泄漏和内存溢出问题
- Android XML解析器 - DOM
- Android版添加phonegap-百度社会化分享插件教程
- android 实现图片旋转,移动,缩放,并且记录变化值,用另外一张图片显示出来
- 【android_温故知新】常用开发技巧
- Android 之版本更新
- 《Android群英传》读书笔记(9)第八章:Activity与Activity调用栈分析