android 为了兼容不同手机 拍照不允许保存 和 获取图片;获取圆角图片 正方形图片 跳转到相册 ; 和返回值

来源:互联网 发布:淘宝数据分析表格 编辑:程序博客网 时间:2024/05/16 12:17

跳转到相册:

// 打开系统相册private void gotoGallery() {Intent intent = new Intent(Intent.ACTION_PICK);intent.setType("image/*");startActivityForResult(intent, REQUEST_GALLERY);// Intent intent = new Intent();// intent.setType("image/*");// intent.setAction(Intent.ACTION_PICK);// startActivityForResult(intent, SELECT_PICTURE);}




跳转到相机界面:

// 打开系统相机private void gotoCamera() {// mCameraLib=new CameraLib();Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 启动时自定义图片保存地址; 某些照相机途径是固定的,不然不给保存// Uri outPutUri = Uri.fromFile(new File(filePath));// intent.putExtra(MediaStore.EXTRA_OUTPUT, outPutUri);String filename = "head" + ".jpg";ContentValues values = new ContentValues();values.put(MediaStore.Images.Media.TITLE, filename);Uri preDefinedCameraUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);Log.e(TAG, "preDefinedCameraUri = " + preDefinedCameraUri.getPath() + " filename = " + filename);intent.putExtra(MediaStore.EXTRA_OUTPUT, preDefinedCameraUri);startActivityForResult(intent, REQUEST_CAMERA);}

 2016-11-29日增加功能

// 打开系统相机private void gotoCamera() {// mCameraLib=new CameraLib();Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 启动时自定义图片保存地址; 某些照相机途径是固定的,不然不给保存// Uri outPutUri = Uri.fromFile(new File(filePath));// intent.putExtra(MediaStore.EXTRA_OUTPUT, outPutUri);String filename = "head" + ".jpg";ContentValues values = new ContentValues();values.put(MediaStore.Images.Media.TITLE, filename);values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");//设置图片的格式//values.put(MediaStore.Images.Media.SIZE, 1024*50);//设置图片大小:1024B*1=1K//values.put(MediaStore.Images.Media.WIDTH, 320);//设置图宽:单位 为分辨率单位,一个像素;//values.put(MediaStore.Images.Media.HEIGHT, 480);//设置图高:单位 为分辨率单位,一个像素;Uri preDefinedCameraUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);Log.e(TAG, "preDefinedCameraUri = " + preDefinedCameraUri.getPath() + " filename = " + filename);intent.putExtra(MediaStore.EXTRA_OUTPUT, preDefinedCameraUri);startActivityForResult(intent, REQUEST_CAMERA);}



获取第一次拍照图片:

@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);// if (resultCode==Activity.RESULT_OK) {Log.e(TAG, "onActivityResult");switch (requestCode) {case REQUEST_CAMERA:// 系统相机返回// 方法一:这个卡,需要放在子线程执行。// 我们要的是一个小头像,不需要存大图片。final String cameraPath_Icon=BitmapHelper.getLastPhotoByPath();final File file = new File(cameraPath_Icon);spLoading.show();new Thread(){@Overridepublic void run() {if (file.exists()) {//if (BitmapHelper.getDegress(cameraPath_Icon) == 0) {Uri uri = Uri.fromFile(file);gotoCrop(uri);Log.e(TAG, "onActivityResult");} else {BitmapHelper.saveBitmap2RotateFilePath(cameraPath_Icon);Uri uri = Uri.fromFile(file);gotoCrop(uri);}}runOnUiThread(new Runnable() {@Overridepublic void run() {spLoading.dismiss();Log.e(TAG, "runOnUiThread");}});}}.start();break;case REQUEST_GALLERY:// 系统相册返回// 注意:系统相册返回进入剪切,需要真机测试if (data != null) {Uri uri = data.getData();gotoCrop(uri);}break;case REQUEST_CROP:// 图片剪裁返回if (data != null) {// 在这里进行存储和旋转。???Bitmap bmp = data.getParcelableExtra("data");                if (bmp==null) {bmp=BitmapFactory.decodeFile(filePath_Icon);}bmp = getRoundCornerBitmap(bmp, 360);headIcon.setImageBitmap(bmp);sendNotifyBroad();// 然后将图片保存到本地,和将图片的本地存储地址 保存到本地数据库中}break;// case REQUEST_CAMERA:// break;}// }}

跳转到剪切图片界面:

// 打开图片剪切private void gotoCrop(Uri inputRri) {Intent intent = new Intent("com.android.camera.action.CROP");intent.setDataAndType(inputRri, "image/*");intent.putExtra("crop", "true");intent.putExtra("aspectX", 1); // 设置剪切框的比例intent.putExtra("aspectY", 1);intent.putExtra("outputX", 150); // 图片输出大小intent.putExtra("outputY", 150); // 图片输出大小intent.putExtra("noFaceDetection", true);intent.putExtra("return-data", true);intent.putExtra("circleCrop", "true");// 是否进入圆角剪裁框Uri outPutUri = Uri.fromFile(new File(filePath_Icon));intent.putExtra(MediaStore.EXTRA_OUTPUT, outPutUri);// 剪裁的图片存放的位置startActivityForResult(intent, REQUEST_CROP);}
获取圆图片:

/** * 获取圆角位图的方法 *  * @param bitmap *            数据源 * @param pixels *            圆角角度,360是圆形 * @return */private Bitmap getRoundCornerBitmap(Bitmap bitmap, int pixels) {Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);// 获取高像素的图片Canvas canvas = new Canvas(output);final int color = 0xff424242;final Paint paint = new Paint();final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());final RectF rectF = new RectF(rect);final float roundPx = pixels;paint.setAntiAlias(true);canvas.drawARGB(0, 0, 0, 0);paint.setColor(color);canvas.drawRoundRect(rectF, roundPx, roundPx, paint);paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));canvas.drawBitmap(bitmap, rect, rect, paint);return output;}
获得正方行图片:

/** * Bitmap 处理获取到正方形的图片 *  * @param bitmap * @return */public static Bitmap bitmapSquareCrop(Bitmap bitmap) {int w = bitmap.getWidth(); // 得到图片的宽,高int h = bitmap.getHeight();int wh = w > h ? h : w;// 裁切后所取的正方形区域边长int retX = w > h ? (w - h) / 2 : 0;// 基于原图,取正方形左上角x坐标int retY = w > h ? 0 : (h - w) / 2;// 下面这句是关键return Bitmap.createBitmap(bitmap, retX, retY, wh, wh, null, false);}





0 0
原创粉丝点击