packagecom.carloz.invokecamera;importandroid.content.ContentValues;importandroid.content.Intent;importandroid.graphics.Bitmap;importandroid.graphics.BitmapFactory;importandroid.net.Uri;importandroid.os.Bundle;importandroid.os.Environment;importandroid.os.SystemClock;importandroid.provider.MediaStore;importandroid.support.v7.app.ActionBarActivity;importandroid.util.Log;importandroid.view.View;importandroid.widget.Button;importandroid.widget.ImageView;importjava.io.ByteArrayInputStream;importjava.io.ByteArrayOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.InputStream;public class InvokeCameraActivity extendsActionBarActivity {private String TAG = "CARLOZ";privateImageView iv;privateButton button;privateFile file;privateUri uri;
@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.activity_invoke_camera);
iv=(ImageView) findViewById(R.id.imageView1);
button=(Button) findViewById(R.id.button1);
file= new File("/data/sdcard/DCIM/Camera/carloz.jpg");
uri=Uri.fromFile(file);//String imageName = "carlo" + System.currentTimeMillis();//ContentValues values = new ContentValues();//values.put(MediaStore.Images.Media.TITLE, imageName);//values.put(MediaStore.Images.Media.DISPLAY_NAME, imageName+".ipg");//values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpg");//uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Log.d(TAG,"onCreate - uri: " +uri);
button.setOnClickListener(newView.OnClickListener() {
@Overridepublic voidonClick(View v) {
Intent intent= newIntent();
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);//intent.putExtra(MediaStore.Images.Media.ORIENTATION, 0);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent,3);
}
});
}
@Overrideprotected void onActivityResult(int requestCode, intresultCode, Intent data) {
Log.d(TAG,"onActivityResult requestCode=" +requestCode+ ", resultCode=" +resultCode+ ", data=" +data);if (resultCode ==RESULT_OK) {switch(requestCode) {case 1:
iv.setImageURI(uri);break;case 2:
startPhotoZoom(uri);break;case 3:try{
Log.d(TAG,"onActivityResult BitmapFactory filepath: " +file.getAbsolutePath());//BitmapFactory.Options options = new BitmapFactory.Options();//options.inSampleSize = 2;
InputStream is = new FileInputStream(file.getAbsolutePath());//读出指定的文件,二进制流
Bitmap bitmap =BitmapFactory.decodeStream(is);//Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());//bitmap = compressImage(bitmap,500);
if (bitmap != null) {
Log.d(TAG,"onActivityResult bitmap != null");
iv.setImageBitmap(bitmap);
}else{
Log.d(TAG,"onActivityResult - bitmap is null");
}
is.close();
}catch(Exception e) {//TODO: handle exception
Log.d(TAG, "onActivityResult - BitmapFactory Exception: " +e.toString());
}break;default:
Log.d(TAG,"onActivityResult - request code not define !");break;
}
}else{
Log.d(TAG,"onActivityResult - RESULT NOT OK");
}super.onActivityResult(requestCode, resultCode, data);
}/*** 裁剪图片
*
*@paramuri*/
public voidstartPhotoZoom(Uri uri) {
Log.d(TAG,"startPhotoZoom - uri: " +uri.toString());
Intent intent= new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri,"image/*");
intent.putExtra("crop", "true");//crop=true 有这句才能出来最后的裁剪页面.
intent.putExtra("aspectX", 1);//这两项为裁剪框的比例.
intent.putExtra("aspectY", 1);//x:y=1:1
intent.putExtra("outputX", 200);//图片输出大小
intent.putExtra("outputY", 200);
intent.putExtra("output", uri);
intent.putExtra("outputFormat", "jpg");//返回格式
startActivityForResult(intent, 3);
}/*** 将图片image压缩成大小为 size的图片(size表示图片大小,单位是KB)
*
*@paramimage 图片资源
*@paramsize 图片大小
*@returnBitmap*/
private Bitmap compressImage(Bitmap image, intsize) {
Log.d(TAG,"compressImage - size: " +size);
ByteArrayOutputStream baos= newByteArrayOutputStream();//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
image.compress(Bitmap.CompressFormat.JPEG, 100, baos);int options = 100;//循环判断如果压缩后图片是否大于100kb,大于继续压缩
while (baos.toByteArray().length / 1024 >size) {//重置baos即清空baos
baos.reset();//每次都减少10
options -= 10;//这里压缩options%,把压缩后的数据存放到baos中
image.compress(Bitmap.CompressFormat.JPEG, options, baos);
}//把压缩后的数据baos存放到ByteArrayInputStream中
ByteArrayInputStream isBm = newByteArrayInputStream(baos.toByteArray());//把ByteArrayInputStream数据生成图片
Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);returnbitmap;
}
}