android 拍照或从相册获取图片 返回 bitmap
2015-05-11 17:46
323 查看
这里用简单的方法实现:
private static final int PHOTO_REQUEST_CAMERA = 1;// 拍照
private static final int PHOTO_REQUEST_GALLERY = 2;// 从相册中选择
PublishImgActivity.this);
builder.setTitle("选择方式");
builder.setPositiveButton("拍照", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
dialog.dismiss();
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
// 判断存储卡是否可以用,可用进行存储
if (hasSdcard())
{
SimpleDateFormat timeStampFormat = new SimpleDateFormat(
"yyyy_MM_dd_HH_mm_ss");
String filename = timeStampFormat.format(new Date());
ContentValues values = new ContentValues();
values.put(Media.TITLE, filename);
photoUri1 = getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
values);
intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri1);
}
startActivityForResult(intent, PHOTO_REQUEST_CAMERA);
}
});
builder.setNeutralButton("相册", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
dialog.dismiss();
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, PHOTO_REQUEST_GALLERY);
}
});
builder.create().show();
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == PHOTO_REQUEST_GALLERY)
{
if (data != null)
{
// 得到图片的全路径
photoUri1 = data.getData();
// bitmap1 = decodeUriAsBitmap(photoUri1);
// img1.setImageBitmap(bitmap1);
// imageLoader.getInstance().displayImage(
// photoUri1.toString(), img1, animateFirstListener);
bitmap1 = small(imageLoader.getInstance().loadImageSync(
photoUri1.toString()));
img1.setImageBitmap(bitmap1);
}
}
else if (requestCode == PHOTO_REQUEST_CAMERA)
{
if (hasSdcard())
{
if (resultCode == -1)
{
// bitmap1 = decodeUriAsBitmap(photoUri1);
// img1.setImageBitmap(bitmap1);
// imageLoader.getInstance().displayImage(
// photoUri1.toString(), img1,
// animateFirstListener);
// bitmap1 = img1.getDrawingCache();
bitmap1 = small(imageLoader.getInstance()
.loadImageSync(photoUri1.toString()));
img1.setImageBitmap(bitmap1);
}
}
else
{
Toast.makeText(PublishImgActivity.this, "未找到存储卡,无法存储照片!", 0)
.show();
}
}
super.onActivityResult(requestCode, resultCode, data);
}
{
try
{
Matrix matrix = new Matrix();
matrix.postScale((float) 480 / bitmap.getWidth(), (float) 480
/ bitmap.getWidth()); // 长和宽放大缩小的比例
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
bitmap.getHeight(), matrix, true);
}
catch (Exception e)
{
e.printStackTrace();
return null;
}
return bitmap;
}
1、申明对象:
private Uri photoUri1;private static final int PHOTO_REQUEST_CAMERA = 1;// 拍照
private static final int PHOTO_REQUEST_GALLERY = 2;// 从相册中选择
2、弹出菜单选择拍照 或者 相册,将下面代码放在你的事件里:
AlertDialog.Builder builder = new AlertDialog.Builder(PublishImgActivity.this);
builder.setTitle("选择方式");
builder.setPositiveButton("拍照", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
dialog.dismiss();
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
// 判断存储卡是否可以用,可用进行存储
if (hasSdcard())
{
SimpleDateFormat timeStampFormat = new SimpleDateFormat(
"yyyy_MM_dd_HH_mm_ss");
String filename = timeStampFormat.format(new Date());
ContentValues values = new ContentValues();
values.put(Media.TITLE, filename);
photoUri1 = getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
values);
intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri1);
}
startActivityForResult(intent, PHOTO_REQUEST_CAMERA);
}
});
builder.setNeutralButton("相册", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
dialog.dismiss();
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, PHOTO_REQUEST_GALLERY);
}
});
builder.create().show();
3、获取返回图片:
这里我用了开源的imageloader,根据Uri来获取bitmap,相当方便,也不用考虑OOM。@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == PHOTO_REQUEST_GALLERY)
{
if (data != null)
{
// 得到图片的全路径
photoUri1 = data.getData();
// bitmap1 = decodeUriAsBitmap(photoUri1);
// img1.setImageBitmap(bitmap1);
// imageLoader.getInstance().displayImage(
// photoUri1.toString(), img1, animateFirstListener);
bitmap1 = small(imageLoader.getInstance().loadImageSync(
photoUri1.toString()));
img1.setImageBitmap(bitmap1);
}
}
else if (requestCode == PHOTO_REQUEST_CAMERA)
{
if (hasSdcard())
{
if (resultCode == -1)
{
// bitmap1 = decodeUriAsBitmap(photoUri1);
// img1.setImageBitmap(bitmap1);
// imageLoader.getInstance().displayImage(
// photoUri1.toString(), img1,
// animateFirstListener);
// bitmap1 = img1.getDrawingCache();
bitmap1 = small(imageLoader.getInstance()
.loadImageSync(photoUri1.toString()));
img1.setImageBitmap(bitmap1);
}
}
else
{
Toast.makeText(PublishImgActivity.this, "未找到存储卡,无法存储照片!", 0)
.show();
}
}
super.onActivityResult(requestCode, resultCode, data);
}
4、相关方法:
private Bitmap small(Bitmap bitmap){
try
{
Matrix matrix = new Matrix();
matrix.postScale((float) 480 / bitmap.getWidth(), (float) 480
/ bitmap.getWidth()); // 长和宽放大缩小的比例
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),
bitmap.getHeight(), matrix, true);
}
catch (Exception e)
{
e.printStackTrace();
return null;
}
return bitmap;
}
相关文章推荐
- android 调用系统相册选取照片或者打开相机拍照获取图片,返回时为什么会回到home界面或者到前一个界面,然后才会跳转到当前activity
- Android实现选择相册图片和拍照,并手动截图返回图片路径和Bitmap对象
- android 调用系统相册选取照片或者打开相机拍照获取图片,返回时回到手机桌面,然后才会跳转到当前activity
- android 调用系统相册选取照片或者打开相机拍照获取图片,返回时回到手机桌面,然后才会跳转到当前activity
- (笔记)Android获取相册图片并返回
- Android开发,调用相册图片或者调用相机进行拍照获取图片
- Android开发之获取相册照片和获取拍照照片三之 图片旋转
- Android 拍照/相册 获取图片裁剪显示
- android 7.0从相册或拍照获取图片并剪切,包含权限获取
- Android 调用相机APP获取拍照图片和从相册选择图片
- android 拍照和相册图片获取
- android 调用系统相册选取照片或者打开相机拍照获取图片
- Android ImageUtils 图片工具类,包括:小米从相册调图像空指针,三星旋转照片,压缩图片,保存Bitmap到本地,获取本地视频的缩略图,毛化玻璃效果,代码以后会更新
- Android 相册选择照片或拍照获取图片系统6.0及7.0实现
- Android打开相册vs拍照获取图片的原理实现
- android获取网络图片的用法 BitmapFactory.decodeByteArray 返回null
- Android-->拍照/相册选择照片(从Uri中获取图片路径)
- Android 拍照剪裁,获取相册图片,上传照片至服务端
- Android 拍照或者从相册获取图片的实现
- Android从相机拍照获取图片及从相册直接获取图片