Android:拍照功能及将图片压缩存入指定路径的方法
2016-04-13 10:57
489 查看
package com.example.administrator.testapplication; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Environment; import android.provider.MediaStore; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.view.Window; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ImageView; import java.io.File; import java.io.IOException; import java.math.BigDecimal; public class MainActivity extends Activity { private ImageView img; private static final String TEMP_PATH = Environment.getExternalStorageDirectory().getAbsolutePath() + "/tmp/temp_" + System.currentTimeMillis() + ".jpg"; private static final int REQ_CARMER = 0x002; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); isFolderExists(Environment.getExternalStorageDirectory().getAbsolutePath() + "/tmp/");//判断目录是否存在 checkFile(TEMP_PATH);//检查文件是否存在 img = (ImageView) findViewById(R.id.img); findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { takePhoto(); } }); } //检查文件是否存在 private void checkFile(String path) { File file = new File(path); if (!file.exists()) { try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } } //判断目录是否存在 boolean isFolderExists(String strFolder) { File file = new File(strFolder); if (!file.exists()) { if (file.mkdirs()) { return true; } else { return false; } } return true; } private void takePhoto() { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //path为保存图片的路径,执行完拍照以后能保存到指定的路径下 File file = new File(TEMP_PATH); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); intent.putExtra(MediaStore.Images.Media.ORIENTATION, 0); startActivityForResult(intent, REQ_CARMER); } //图片压缩 public Bitmap setImage(String path, Intent intent) { BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFile(path, options); // double value = new BigDecimal(options.outWidth).divide(new BigDecimal(options.outHeight), 4, BigDecimal.ROUND_HALF_UP).doubleValue(); // intent.putExtra(Constants.ISNULL, false); // intent.putExtra(Constants.IMGPATH, path); // intent.putExtra(Constants.ASPECT_RATIO, value == 0d ? "1.0000" : format.format(value)); options.inJustDecodeBounds = false; int be = Math.max(options.outWidth, options.outHeight) / 20; if (be % 10 != 0) be += 10; be = be / 10; if (be <= 0) be = 1; options.inSampleSize = be; return BitmapFactory.decodeFile(path, options); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { switch (requestCode) { case REQ_CARMER: img.setImageBitmap(setImage(TEMP_PATH, new Intent())); break; } } super.onActivityResult(requestCode, resultCode, data); } }
不要忘了添加权限:
<uses-permission android:name="android.permission.CAMERA"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
相关文章推荐
- 浅析Android手机卫士sim卡绑定
- Android NDK开发Crash错误定位
- Android Studio 中文社区
- android fragment取消预加载
- Android Activity启动模式
- Android studio 快捷键 快速查看类方法 结构
- Android Color.xml文件
- 【转载】第一次使用Android Studio时你应该知道的一切配置(一)
- Android 启动页面引导页面登陆注册主页通用框架
- ArrayList数据去重的简单方法
- [Android]使用RecyclerView替代ListView
- ubuntu12.04 android studio 安装
- Android Handle机制 理解Looper、Handle、Message的关系
- android studio 有用快捷键
- 【Android】如何写一个JsBridge
- Android Studio 运行项目出现Information:Gradle tasks异常解决办法。
- 下拉选则类似spinner_啸尘学习笔记
- Android随笔之——PackageManager详解
- Android——四大组件的协同工作
- Android studio 编译失败Error:Could not read entry ':app:processDebugManifest' from cache taskArtifacts.b