从相册或者相机获得uri转为bitmap

选择拍照或者选择从相册中选择照片

public class chooser extends Activity {

        private ImageView imageView;
        private OnClickListener imgViewListener;
        Bitmap myBitmap;
        private byte[] mContent;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            imageView = (ImageView) findViewById(R.id.ivPic);

            imgViewListener = new OnClickListener() {
                public void onClick(View v) {
                    final CharSequence[] items = {"相册", "拍照"};
                    AlertDialog dlg = new AlertDialog.Builder(chooser.this).setTitle("选择图片").setItems(items,
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int item) {
                                    //这里item是根据选择的方式,        在items数组里面定义了两种方式,拍照的下标为1所以就调用拍照方法       
                                    if (item == 1) {
                                        Intent getImageByCamera = new Intent("android.media.action.IMAGE_CAPTURE");
                                        startActivityForResult(getImageByCamera, 1);
                                    } else {
                                        Intent getImage = new Intent(Intent.ACTION_GET_CONTENT);
                                        getImage.addCategory(Intent.CATEGORY_OPENABLE);
                                        getImage.setType("image/jpeg");
                                        startActivityForResult(getImage, 0);
                                    }
                                }
                            }).create();
                    dlg.show();
                }
            };
            //给imageView控件绑定点点击监听器 
            imageView.setOnClickListener(imgViewListener);

        }

启用相机或者从相册中选择照片之后的回调

@Override 
        protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

        ContentResolver resolver = getContentResolver(); 
        /** 
         * 因为两种方式都用到了startActivityForResult方法,这个方法执行完后都会执行onActivityResult方法, 
         * 所以为了区别到底选择了那个方式获取图片要进行判断,这里的requestCode跟startActivityForResult里面第二个参数对应 
         */ 
        if (requestCode == 0) { 
            try { 
                //获得图片的uri 
                Uri originalUri = data.getData(); 
                //将图片内容解析成字节数组 
                mContent=readStream(resolver.openInputStream(Uri.parse(originalUri.toString()))); 
                //将字节数组转换为ImageView可调用的Bitmap对象 
                myBitmap = getPicFromBytes(mContent, null); 
                把得到的图片绑定在控件上显示 
                imageView.setImageBitmap(myBitmap); 
            } catch (Exception e) { 
                System.out.println(e.getMessage()); 
            } 

        }else if(requestCode ==1){ 
                try { 
                        super.onActivityResult(requestCode, resultCode, data); 
                            Bundle extras = data.getExtras(); 
                            myBitmap = (Bitmap) extras.get("data"); 
                            ByteArrayOutputStream baos = new ByteArrayOutputStream();     
                            myBitmap.compress(Bitmap.CompressFormat.JPEG , 100, baos);     
                                mContent=baos.toByteArray(); 
                        } catch (Exception e) { 
                                // TODO Auto-generated catch block 
                                e.printStackTrace(); 
                        } 
                        //把得到的图片绑定在控件上显示 
                        imageView.setImageBitmap(myBitmap); 
        } 

    } 
}
    public static Bitmap getPicFromBytes(byte[] bytes, BitmapFactory.Options opts) { 
        if (bytes != null) 
            if (opts != null) 
                return BitmapFactory.decodeByteArray(bytes, 0, bytes.length,opts); 
            else 
                return BitmapFactory.decodeByteArray(bytes, 0, bytes.length); 
        return null; 
    } 

    public static byte[] readStream(InputStream inStream) throws Exception { 
        byte[] buffer = new byte[1024]; 
        int len = -1; 
        ByteArrayOutputStream outStream = new ByteArrayOutputStream(); 
        while ((len = inStream.read(buffer)) != -1) { 
                 outStream.write(buffer, 0, len); 
        } 
        byte[] data = outStream.toByteArray(); 
        outStream.close(); 
        inStream.close(); 
        return data; 
   } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值