Android开发实现ImageView加载摄像头拍摄的大图功能

本文实例讲述了Android开发实现ImageView加载摄像头拍摄的大图功能。分享给大家供大家参考,具体如下:

这个方法是从官方demo中摘录的,在此记录学习。

权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-feature android:name="android.hardware.camera2" android:required="false" />

另:关于权限控制还可参考:Android Manifest功能与权限描述大全

设置变量保存文件存储路径

private String mCurrentPhotoPath; /** * 拍照flag */ private static final int REQUEST_IMAGE_CAPTURE_O = 2;

创建存储路径及文件名

/** * 创建拍摄的图片的存储路径及文件名 * @return * @throws IOException */ private File createImageFile() throws IOException{ String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); String imageFileName = "JPEG_" + timeStamp + "_"; File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); Log.d("TrainingFirstActivity", "storageDir:" + storageDir); File image = File.createTempFile(imageFileName, ".jpg", storageDir); mCurrentPhotoPath = image.getAbsolutePath(); Log.d("image.getAbsolutePath()", image.getAbsolutePath() + ""); return image; }

拍摄图片并保存

Intent takePictureOintent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (takePictureOintent.resolveActivity(getPackageManager()) != null){ File photoFile = null; try { photoFile = createImageFile(); } catch (IOException e) { e.printStackTrace(); } if (photoFile != null){ takePictureOintent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile)); startActivityForResult(takePictureOintent, REQUEST_IMAGE_CAPTURE_O); } }

处理并压缩拍照结果,takePhotoThenToShowImg是一个ImageView控件

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_CAPTURE_O && resultCode == RESULT_OK){ int targetW = takePhotoThenToShowImg.getWidth(); int targetH = takePhotoThenToShowImg.getHeight(); /* Get the size of the image */ BitmapFactory.Options bmOptions = new BitmapFactory.Options(); bmOptions.inJustDecodeBounds = true; BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions); int photoW = bmOptions.outWidth; int photoH = bmOptions.outHeight; /* Figure out which way needs to be reduced less */ int scaleFactor = 1; if ((targetW > 0) || (targetH > 0)) { scaleFactor = Math.min(photoW/targetW, photoH/targetH); } /* Set bitmap options to scale the image decode target */ bmOptions.inJustDecodeBounds = false; bmOptions.inSampleSize = scaleFactor; bmOptions.inPurgeable = true; /* Decode the JPEG file into a Bitmap */ Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions); /* Associate the Bitmap to the ImageView */ takePhotoThenToShowImg.setImageBitmap(bitmap); galleryAddPic(); } }

最后可以将拍摄到的照片添加到Media Provider的数据库中,以便图库或者其他程序读取照片

/** * 将拍摄到的照片添加到Media Provider的数据库中 */ private void galleryAddPic(){ Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); File f = new File(mCurrentPhotoPath); Uri contentUri = Uri.fromFile(f); mediaScanIntent.setData(contentUri); this.sendBroadcast(mediaScanIntent); }

如果只需要缩略图的话,只要调摄像头拍摄直接处理结果就行

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK){//展示图片 Bundle extras = data.getExtras(); Bitmap imageBitmap = (Bitmap) extras.get("data"); takePhotoThenToShowImg.setImageBitmap(imageBitmap); } }

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android拍照与图片处理技巧总结》、《Android图形与图像处理技巧总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

时间: 2024-10-22 21:20:50

Android开发实现ImageView加载摄像头拍摄的大图功能的相关文章

Android开发中 页面加载一张超大图片(561kb)时出现OOM

今天做项目,发现需要显示一张超大图片,处理过后,还有561Kb      加载的时候,就crash --- OOM      shortMsg:java.lang.OutOfMemoryError      longMsg:java.lang.OutOfMemoryError: bitmap size exceeds VM budget      stackTrace:java.lang.OutOfMemoryError: bitmap size exceeds VM budget      a

android imageview加载网络图片无图片

问题描述 android imageview加载网络图片无图片 MainActivity.java package study_imageput.com.study_apktointent; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.widget.ImageV

Android使用控件ImageView加载图片的方法_Android

在 Android 加载图片一般使用 ImageView,这里简单记录一下这个控件的使用方法. 最简单就是在 xml 里直接使用 ImageView 标签: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="

Android 常见的图片加载框架详细介绍_Android

Android 常见的图片加载框架 图片加载涉及到图片的缓存.图片的处理.图片的显示等.而随着市面上手机设备的硬件水平飞速发展,对图片的显示要求越来越高,稍微处理不好就会造成内存溢出等问题.很多软件厂家的通用做法就是借用第三方的框架进行图片加载. 开源框架的源码还是挺复杂的,但使用较为简单.大部分框架其实都差不多,配置稍微麻烦点,但是使用时一般只需要一行,显示方法一般会提供多个重载方法,支持不同需要.这样会减少很不必要的麻烦.同时,第三方框架的使用较为方便,这大大的减少了工作量.提高了开发效率.

Android 开发随手笔记之使用摄像头拍照_Android

在Android中,使用摄像头拍照一般有两种方法, 一种是调用系统自带的Camera,另一种是自己写一个摄像的界面.       我们要添加如下权限: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.CAMERA"/> 1.调用系统Camer

Android实现Listview异步加载网络图片并动态更新的方法_Android

本文实例讲述了Android实现Listview异步加载网络图片并动态更新的方法.分享给大家供大家参考,具体如下: 应用实例:解析后台返回的数据,把每条都显示在ListView中,包括活动图片.店名.活动详情.地址.电话和距离等. 在布局文件中ListView的定义: <ListView android:id="@id/maplistview" android:background="@drawable/bg" android:layout_width=&qu

Android实现ListView异步加载的方法(改进版)_Android

本文实例讲述了Android实现ListView异步加载的方法.分享给大家供大家参考,具体如下: @Override public View getView(int position, View convertView, ViewGroup parent) { ---- ViewHolder VH = null; ---- VH.mImageView.setTag(position); VH.mThumb.setImageDrawable(imageLoader.loadDrawable(pos

Android 开发随手笔记之使用摄像头拍照

在Android中,使用摄像头拍照一般有两种方法, 一种是调用系统自带的Camera,另一种是自己写一个摄像的界面. 我们要添加如下权限: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.CAMERA"/> 1.调用系统Camera 调用系统

Android实现ListView异步加载的方法(改进版)

本文实例讲述了Android实现ListView异步加载的方法.分享给大家供大家参考,具体如下: @Override public View getView(int position, View convertView, ViewGroup parent) { ---- ViewHolder VH = null; ---- VH.mImageView.setTag(position); VH.mThumb.setImageDrawable(imageLoader.loadDrawable(pos