最近一直被一個問題所困擾那就是調用系統的剪切板剪切圖片的時候如果輸出的圖片大小太大而自己剪切的太小的話就會出現黑色的填充邊,十分不美觀,在網上搜索了很長時間終於發現瞭解決的方法,下面的圖片選取分類討論了android4.4的文件路徑
Uri uripath = null;
String path;
System.out.println("uri 是:"+uri);
if(DocumentsContract.isDocumentUri(this, uri)){//判斷是否是document格式
String wholeID = DocumentsContract.getDocumentId(uri);
String id = wholeID.split(":")[1];//split分隔符,分爲兩個數組
String[] column = { MediaStore.Images.Media.DATA };
String sel = MediaStore.Images.Media._ID +" =?";
Cursor cursor = this.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, column,
sel, new String[] { id }, null);
int columnIndex = cursor.getColumnIndex(column[0]);
if (cursor.moveToFirst()) {
path = cursor.getString(columnIndex);
uripath=Uri.fromFile(new File(path));
System.out.println("uripath 是:"+uripath);
}
}else{
uripath=uri;
}
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uripath, "image/*");
// 設置裁剪
intent.putExtra("crop", "true");
// aspectX aspectY 是寬高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪圖片寬高
intent.putExtra("outputX",320);
intent.putExtra("outputY", 320);
// intent.putExtra(MediaStore.EXTRA_OUTPUT, outputUri);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("return-data", true);
startActivityForResult(intent, PHOTO_CRAP_REQUEST_CODE);
這時的剪切搬弄出來的圖片如果你選擇過小的話就會出現黑邊,那麼此時就可以加上兩句話就ok了~
intent.putExtra("scale",true);
intent.putExtra("scaleUpIfNeeded", true);
這時候如果選擇圖片過小的話就會拉伸,但是這也有一個缺點就是圖片質量不高了。。。但是爲了大圖片的清晰度也只好如此方法了。。如果大家還有更好地方法也拿出來分享一下吧!
還有值得說的一點就是android4.4的圖片選擇,大家都知道android4.4以後的圖片存儲的uri和4.4以前的額不同了,所以用以前的老方法是不可行的,但是通過我的項目研究發現也並不是所有的4.4中的圖片的呢存儲的uri都是全新的形式,也存在老的形式,所以,對於android4.4的圖片選擇我們就應該先判斷一下他用的哪一種uri然後針對不同的形式進行解析,也就是加一個判斷if(DocumentsContract.isDocumentUri(this,
uri))//判斷是否是document格式~這樣就不會發現文件找不到的錯誤啦!