2011年9月27日 星期二

Android學習_uri轉byte

在進行圖片的處理時,常常會遇到需要將手機內圖片(照片)轉成byte再傳出去(例如facebook的圖片上傳)。

步驟:
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[]擺放傳入自己或別人的方法中,完成圖片的傳遞。

8 則留言:

烏托邦 提到...

不好意思 版大
我想請問一下
我這樣打對嗎?

ContentResolver resolver = getContentResolver();
resolver.openInputStream("drawable/p01.jpg");

ola的家 提到...

resolver.openInputStream的參數為Uri,指的是手機內的檔案,大概類似『file:///ola/android.txt』這樣的描述,其目的是將該檔案讀出來,並返回InputStream的格式。

你寫的『drawable/p01.jpg』指的是drawable,也就是程式內的資源。

如果你最後的目的是取得byte[],那可以直接把drawable內的圖轉成bitmap,再由bitmap轉byte[]。

Unknown 提到...

//將路徑轉為uri
String ImagePath = "file://sdcard/DCIM/13.jpg";
Uri uri = Uri.parse(ImagePath);
//將uri轉成intputstream
ContentResolver resolver = getContentResolver();
resolver.openIntputStream(uri);

請問從手機中抓取圖片uri 轉成intputstream 這樣是正確的嗎

ola的家 提到...

file:後要"三個"/,
即file:///sdcard/DCIM/13.jpg

或是用Environment.getExternalStorageDirectory()取得檔案位置

Unknown 提到...

感謝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

不知道是哪邊有錯誤

匿名 提到...

不好意思,看了很久還是不太懂步驟一要怎麼接上步驟二?謝謝!

ola的家 提到...

resolver.openInputStream(uri);的output就是inputstream,把inputstream帶入第二個函式中。

我把第一部份的程式碼補充一下。

匿名 提到...

感謝!

張貼留言