android拍照自动生成缩略图,Android实现拍照及图片显示效果

本文实例为大家分享了Android拍照及图片显示的具体代码,供大家参考,具体内容如下

1、功能声明

当应用需要使用相机、NFC等外设时,需要在AndroidManifest.xml中进行声明。

这样,当设备缺少这些外设时,应用商店的安装程序可以拒绝安装设备。

声明示例代码如下:

android:required="false"/>

2、创建指向文件的File对象

拍摄的照片可以存放到设备的外部存储区。

Android为不同的应用分配的独有的存储区域,同时按照存储数据的类型对存储区域做了进一步地划分。

设置照片存储区域的代码示例如下所示:

public File getPhotoFile(Crime crime) {

//获取应用对应的存储照片的外部存储路径

File externalFilesDir = mContext

.getExternalFilesDir(Environment.DIRECTORY_PICTURES);

if (externalFilesDir == null) {

return null;

}

//创建指向文件的File对象

return new File(externalFilesDir, crime.getPhotoFilename());

}

.............

//每个crime对应的文件名

public String getPhotoFilename() {

return "IMG_" + getId().toString() + ".jpg";

}

3、触发拍照

可以使用MediaStore.ACTION_CAPTURE_IMAGE类型的Intent触发拍照,示例代码如下:

mPhotoButton = (ImageButton) v.findViewById(R.id.crime_camera);

//隐式Intent触发相机拍照

final Intent captureImageIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

//mPhotoFile保存着上文创建的指向指定地址的File

//此处判断是否有能够处理隐式Intent的组件

boolean canTakePhoto = mPhotoFile != null

&& captureImageIntent.resolveActivity(packageManager) != null;

mPhotoButton.setEnabled(canTakePhoto);

if (canTakePhoto) {

//得到File文件对应的Uri地址

Uri uri = Uri.fromFile(mPhotoFile);

//将Uri地址存入到Intent中,相机拍照得到的图像将会存入到该Uri地址对应的File里

captureImageIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);

}

mPhotoButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

startActivityForResult(captureImageIntent, REQUEST_PHOTO);

}

});

4、处理拍照结果

拍照完成后,将可以加载得到图片了。

@Override

public void onActivityResult(int requestCode, int resultCode, Intent data) {

.........

} else if (requestCode == REQUEST_PHOTO) {

updatePhotoView();

}

.........

}

private void updatePhotoView() {

if (mPhotoFile == null || !mPhotoFile.exists()) {

mPhotoView.setImageDrawable(null);

} else {

//加载图片对应的缩略图

Bitmap bitmap = PictureUtils.getScaledBitmap(mPhotoFile.getPath(), getActivity());

mPhotoView.setImageBitmap(bitmap);

}

}

Bitmap只存储实际像素数据,因此即使原始照片已经压缩过,但存入Bitmap对象时,文件并不会被压缩。

因此加载图片时,需要先按照给定区域的大小合理的缩放文件。 然后,用Bitmap加载缩放后的文件,示例代码如下:

//在具体视图未加载前,无法得到视图的实际大小

//因此根据屏幕尺寸,使用估算值进行缩放

public static Bitmap getScaledBitmap(String path, Activity activity) {

Point size = new Point();

activity.getWindowManager().getDefaultDisplay().getSize(size);

return getScaledBitmap(path, size.x, size.y);

}

public static Bitmap getScaledBitmap(String path, int destWidth, int destHeight) {

BitmapFactory.Options options = new BitmapFactory.Options();

options.inJustDecodeBounds = true;

//按照正常尺寸解析文件

BitmapFactory.decodeFile(path, options);

//得到原始文件的宽和高

float srcWidth = options.outWidth;

float srcHeight = options.outHeight;

//inSampleSize表示水平/竖直抽样比

//例如,inSampleSize为2时,水平和数值均在原始基础上,每2个点抽取1个点

//于是,新图的大小变为原来的1/4

int inSampleSize = 1;

if (srcHeight > destHeight || srcWidth > destWidth) {

if (srcWidth > srcHeight) {

inSampleSize = Math.round(srcHeight / destHeight);

} else {

inSampleSize = Math.round(srcWidth / destWidth);

}

}

options = new BitmapFactory.Options();

options.inSampleSize = inSampleSize;

//按新的抽样比,重新解析文件

return BitmapFactory.decodeFile(path, options);

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值