android 图片变量,Android开发实现ImageView加载摄像头拍摄的大图功能

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

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

权限

android:name="android.hardware.camera2"

android:required="false" />

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

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程序设计有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值