本文为大家分享了Android相机、图册基本demo,供大家参考,具体内容如下
package com.example.democamera; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.res.Configuration; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.view.View; import android.widget.ImageView; public class MainActivity extends Activity { private ImageView iv; static final int gallery = 1, camera = 2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv = (ImageView) findViewById(R.id.iv_picture); } /** * 启动图片画廊 * * @param view */ public void startGallery(View view) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); startActivityForResult(intent, gallery); } /** * 启动相机 * * @param view */ public void startCamera(View view) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (isSDExsit()) { /* 创建存放图片文件夹 */ File dir = new File(Environment.getExternalStorageDirectory() + "/my"); if (!dir.exists()) dir.mkdirs(); /* 设置图片参数 得到原尺寸的图片 */ File file = new File(dir, "aaa.jpg"); intent.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION, Configuration.ORIENTATION_UNDEFINED); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); } startActivityForResult(intent, camera); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case gallery: /* 做判断,防止返回报错 */ if (data != null) { /* * 三种方式处理URI */ Uri uri = data.getData(); iv.setImageURI(uri); Bitmap bitmap = BitmapFactory .decodeFile(getPathByUri(uri, this)); iv.setImageBitmap(bitmap); Bitmap bitmap2 = getBitmapByUri(uri, this); iv.setImageBitmap(bitmap2); } break; case camera: if (data != null) {// 这是获得缩略图的方法 Bitmap b = (Bitmap) data.getExtras().get("data"); iv.setImageBitmap(b); } else {// 有sd卡得到图片原图 Bitmap bitmap = BitmapFactory.decodeFile("sdcard/my/aaa.jpg");//直接这样做会有发生OOM的风险,Demo简单这么处理 iv.setImageBitmap(bitmap); } break; default: break; } } /** * Uri-->Bitmap * * @param uri * @param context * @return */ public static Bitmap getBitmapByUri(Uri uri, Context context) { Bitmap bitmap = null; try { bitmap = MediaStore.Images.Media.getBitmap( context.getContentResolver(), uri); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return bitmap; } /** * Uri--->Path * * @param uri * @param context * @return */ public static String getPathByUri(Uri uri, Context context) { String path = null; String[] projection = { MediaStore.Images.Media.DATA }; Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null); if (cursor.moveToFirst()) { int index = cursor .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); path = cursor.getString(index); } return path; } /** * 判断SD卡是否存在 * * @return */ public static boolean isSDExsit() { if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { return true; } else { return false; } } }
下面分享具体Android 调用相机、打开相册、裁剪图片的实现代码,内容如下
private ImageView iv_user_photo; private String fileName = ""; private File tempFile; private int crop = 300;// 裁剪大小 private static final int OPEN_CAMERA_CODE = 10; private static final int OPEN_GALLERY_CODE = 11; private static final int CROP_PHOTO_CODE = 12; private OnClickListener PopupWindowItemOnClick = new OnClickListener() { @Override public void onClick(View v) { menuWindow.dismiss(); switch (v.getId()) { // 拍照 case R.id.btn_camera: initFile(); openCamera(); break; // 相册 case R.id.btn_gallery: initFile(); openGallery(); break; default: break; } } }; public void initFile() { if(fileName.equals("")) { if(FileUtil.existSDCard()) { String path = Environment.getExternalStorageDirectory() + File.separator + "JanuBookingOnline" + File.separator; FileUtil.mkdir(path); Logger.i("path:" + path); fileName = path + "user_head_photo.jpg"; tempFile = new File(fileName); } else { CommonUitl.toast(context, "请插入SD卡"); } } } /** * 调用相机 */ public void openCamera() { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 打开相机 intent.putExtra("output", Uri.fromFile(tempFile)); startActivityForResult(intent, OPEN_CAMERA_CODE); } /** * 打开相册 */ public void openGallery() { Intent intent = new Intent(Intent.ACTION_PICK);// 打开相册 intent.setDataAndType(MediaStore.Images.Media.INTERNAL_CONTENT_URI, "image/*"); intent.putExtra("output", Uri.fromFile(tempFile)); startActivityForResult(intent, OPEN_GALLERY_CODE); } /** * 裁剪图片 * @param uri */ public void cropPhoto(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); intent.putExtra("output", Uri.fromFile(tempFile)); intent.putExtra("crop", true); intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); intent.putExtra("outputX", crop); intent.putExtra("outputY", crop); startActivityForResult(intent, CROP_PHOTO_CODE); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == 1) return; switch (requestCode) { case OPEN_CAMERA_CODE: cropPhoto(Uri.fromFile(tempFile)); break; case OPEN_GALLERY_CODE: cropPhoto(data.getData()); break; case CROP_PHOTO_CODE: try { BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 2; Bitmap bitmap = BitmapFactory.decodeFile(fileName, options); if (bitmap != null) { iv_user_photo.setImageBitmap(bitmap); CommonUitl.sharedPreferences(context, AppConstants.USER_PHOTO, fileName); } } catch (Exception e) { e.printStackTrace(); } break; default: break; } super.onActivityResult(requestCode, resultCode, data); }
以上就是关于Android相机、图册的基本操作内容,希望对大家学习Android软件编程有所帮助。
本文向大家介绍Android开发从相机或相册获取图片裁剪,包括了Android开发从相机或相册获取图片裁剪的使用技巧和注意事项,需要的朋友参考一下 废话不多说了,直接给大家贴代码了。 以上代码很简单,相信大家都可以看的懂吧,欲了解更多信息请持续关注本站,谢谢。
本文向大家介绍Android实现读取相机(相册)图片并进行剪裁,包括了Android实现读取相机(相册)图片并进行剪裁的使用技巧和注意事项,需要的朋友参考一下 我们先说一下思路,在android系统中就自带了图片剪切的应用,所以,我们只需要将我们获取到的相片传给图片剪切应用,再将剪切好的相片返回到我们自己的界面显示就ok了 在开发一些APP的过程中,我们可能涉及到头像的处理,比如从手机或者相册获取
本文向大家介绍Android 相机相册权限设置方法,包括了Android 相机相册权限设置方法的使用技巧和注意事项,需要的朋友参考一下 在AndroidManifest.xml中设置相机和相册的权限, 以上这篇Android 相机相册权限设置方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
我正在构建一个类似于图片中所示的条形码扫描器的相机应用程序。我需要同时使用和API来支持android API>=19。 主要的想法是在整个屏幕上有相机预览,但只保存部分没有变暗(或拍摄的区域没有变暗)。我已经做了一些研究,发现通过和API只拍摄一部分照片是不可能的(但我不是100%确定)。所以我想我需要对我接收到的作为相机捕获的结果的字节数组(压缩成JPEG)进行一些操作。 我尝试以这种方式使用
我发现了一个非常有趣的问题。在拍摄相机照片后(我将设备保持在纵向模式,不旋转),给定的照片有时会旋转,但并不总是旋转。我知道,有些设备总是提供旋转的照片,但它可以使用exif或mediastore信息进行旋转。但在这种情况下,exif和mediastore表示方向为0,但图像是旋转的。最令人沮丧的是,这完全是随机发生的。代码非常简单: 有人见过这个问题吗?我在操作系统更新(4.1.1)后体验了Ga
本文向大家介绍Android拍照和获取相册图片,包括了Android拍照和获取相册图片的使用技巧和注意事项,需要的朋友参考一下 之前遇到各种拍照啊,获取相册图片之类,都是直接去度娘,要么之前的代码复制下,没好好总结过。 再也不要问度娘了,再也不用一堆博客里找啊找了。。。 ----------------------------------------------我是正文的分割线--------