2011-07-24 40 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 –

相关问题