步驟:
1. 將uri傳成inputstream
ContentResolver resolver = getContentResolver();
resolver.openInputStream(uri);
*20120604補充第一步驟程式碼:
byte[] buffer;
ContentResolver resolver = getContentResolver();
buffer = readStream(resolver.openInputStream(Uri.parse(Picuri.toString())));
2. 將inputstream轉成byte[]
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;
}
接著,就可以將byte[]擺放傳入自己或別人的方法中,完成圖片的傳遞。
不好意思 版大
回覆刪除我想請問一下
我這樣打對嗎?
ContentResolver resolver = getContentResolver();
resolver.openInputStream("drawable/p01.jpg");
resolver.openInputStream的參數為Uri,指的是手機內的檔案,大概類似『file:///ola/android.txt』這樣的描述,其目的是將該檔案讀出來,並返回InputStream的格式。
回覆刪除你寫的『drawable/p01.jpg』指的是drawable,也就是程式內的資源。
如果你最後的目的是取得byte[],那可以直接把drawable內的圖轉成bitmap,再由bitmap轉byte[]。
//將路徑轉為uri
回覆刪除String ImagePath = "file://sdcard/DCIM/13.jpg";
Uri uri = Uri.parse(ImagePath);
//將uri轉成intputstream
ContentResolver resolver = getContentResolver();
resolver.openIntputStream(uri);
請問從手機中抓取圖片uri 轉成intputstream 這樣是正確的嗎
file:後要"三個"/,
回覆刪除即file:///sdcard/DCIM/13.jpg
或是用Environment.getExternalStorageDirectory()取得檔案位置
感謝ola大
回覆刪除另外修改後
//將路徑轉為uri
String ImagePath = "file:///sdcard/DCIM/13.jpg";
Uri uri = Uri.parse(ImagePath);
//將uri轉成inputstream
ContentResolver resolver = getContentResolver();
resolver.openInputStream(uri);
其中 resolver.openInputStream(uri);
這行有錯誤
Multiple markers at this line
- Syntax error on token "uri", VariableDeclaratorId expected after
this token
不知道是哪邊有錯誤
不好意思,看了很久還是不太懂步驟一要怎麼接上步驟二?謝謝!
回覆刪除resolver.openInputStream(uri);的output就是inputstream,把inputstream帶入第二個函式中。
回覆刪除我把第一部份的程式碼補充一下。
感謝!
回覆刪除