圖片選擇器詳解

今天工做中要用到圖片選擇器,就研究了一下,下面解析一下具體的代碼步驟 java

通常的圖片選擇器有兩個功能,從相冊裏面獲取圖片,還有拍照獲取圖片 android

一、獲取圖片 數組

1)從相冊獲取圖片 函數


//打開手機中能夠瀏覽圖片的應用讓用戶選擇哪個
Intent getImage = new Intent(Intent.ACTION_GET_CONTENT); 
getImage.addCategory(Intent.CATEGORY_OPENABLE); 
getImage.setType("image/jpeg"); 
startActivityForResult(getImage, 0);
由於是要獲取到圖片的,因此要用startActivityForResult();方法來打開圖庫。


以下圖: spa

2)經過拍照獲取圖片 code


Intent getImageByCamera = newIntent("android.media.action.IMAGE_CAPTURE");   
startActivityForResult(getImageByCamera, 1);
作完這一步以後就能夠進到選擇圖片的界面啦


二、獲取用戶選擇的圖片 orm

由於前面用的是startActivityForResult()方法,因此當選擇完圖片以後會有一個回調函數onActivityResult()來獲取到返回的數據,重寫這個方法: 對象

protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
ContentResolver resolver = getContentResolver(); 
        /**
         * 由於兩種方式都用到了startActivityForResult方法,這個方法執行完後都會執行onActivityR                  *esult方法,
         * 因此爲了區別到底選擇了那個方式獲取圖片要進行判斷,這裏的requestCode跟startActivityFo                   *rResult裏面第二個參數對應
         */
        if (requestCode == 0) { 
            try { 
                //得到圖片的uri 
                Uri originalUri = data.getData(); 
                //將圖片內容解析成字節數組 
                byte[] mContent mContent=readStream(resolver.openInputStream(Uri.parse(originalUri.toString())));
                //將字節數組轉換爲ImageView可調用的Bitmap對象 
                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;


   }

上面的這些代碼執行後就會把圖片顯示到咱們的ImageView控件中。 圖片

可是有時候咱們的需求不一樣,好比說咱們並不須要圖片顯示出來,咱們只是想獲取到圖片的路徑、名字等等 get

一、獲取圖片的路徑,有兩種方法

    1)Uri originalUri = data.getData(); 
           String imgPath = Uri.parse(originalUri.toString()).toString();

    2) Uri uri = data.getData();
        Cursor cursor = getContentResolver().query(uri, null, null, null, null);
        cursor.moveToFirst();
        String imgNo = cursor.getString(0); //圖片編號
        String imgPath = cursor.getString(1); //圖片文件路徑
        String imgSize = cursor.getString(2); //圖片大小
        String imgName = cursor.getString(3); //圖片文件名

第2種方法就比較通用了,能夠獲取到跟圖片相關的全部信息

到這裏一個完整的圖片選擇器就搞定了,趕忙試試吧

相關文章
相關標籤/搜索