2011-07-24 68 views
1

這讓我有點生氣!Android Bitmap.Compress給字節[]帶-1字節?

我已拍攝的圖像,並使用Bitmap.Compress方法來獲取圖像到字節數組(如下)

InputStream is = MyActivity.this.getContentResolver().openInputStream(imageUri); 
BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inSampleSize = 2; //try to decrease decoded image 
options.inPurgeable = true; //purgeable to disk 
Bitmap bitmap = BitmapFactory.decodeStream(is, null, options); 
ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
bitmap.compress(Bitmap.CompressFormat.JPEG, 20, bos); 
myModel.setFullImage(bos.toByteArray()); 

然而,當我看一看該字節的前幾個字節[]它包含了大量的-1以及有效號碼(0-255)和負數像-98等

然後我送跨線這個數據(JSON格式),也未能將其轉換到ac#byte []中,因爲數組中的負數。

什麼錯誤或有我錯過了什麼。我甚至嘗試將compression fator設置爲0以防壓縮做某事。

奇怪的是,如果我將字節轉換爲base64然後發送我可以然後成功地轉換所述的base64字符串轉換成字節[]在C#作爲保存圖像。

怎麼回事?

在此先感謝

喬恩

回答

1

Java的byte簽訂(它沒有無符號類型),而C#的byte是無符號的(對已簽名的字節單獨sbyte);所以兩個直接選項出現:

  • 使用鹼-64,這將是免疫混亂
  • 讀出的數據作爲C#sbyte[],然後只投的值,以(每件)
byte

我可能會使用基本-64選擇,因爲它也應該比其表示爲上線號更小,但由於轉換的例子:

sbyte[] orig = ... 
byte[] munged = Array.ConvertAll(orig, x => (byte)x); 

(如果使用選中的上下文,請添加unchecked,但這種情況非常罕見;未選中是默認和泥潭通用選項)。

+0

感謝馬克,我給這個一去,但我下的印象的base64增加,而不是減少它的大小這就是爲什麼我只是想送一個普通的字節數組。 – Jon

+1

@喬恩:BASE64 *不*增加尺寸(相對於原始字節),但JSON更增大了尺寸,所以BASE64應該比JSON較小編碼。 – Gabe

+1

@喬恩作爲加布筆記 - 你是不是發送原始字節[] - 你發送文本;和整數作爲文本是*很*大於base-64 –

相關問題