繁体   English   中英

Android Bitmap.Compress提供-1个字节的byte []吗?

[英]Android Bitmap.Compress gives byte[] with -1 bytes?

这让我有点生气!

我已经拍摄了图像,并使用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());

但是,当我查看byte []的前几个字节时,它包含许多-1以及有效数字(0-255)和负数,例如-98等。

然后,我通过电线(以json格式)发送此数据,由于数组中的负数,它无法将其转换为ac#byte []。

怎么了还是我错过了什么。 我什至尝试将压缩系数设为0,以防压缩正在执行某些操作。

奇怪的是,如果我将字节转换为base64,然后进行传输,则可以成功将base64字符串转换为c#中的byte [],以保存图像。

怎么了

提前致谢

乔恩

Java的byte进行签名(它没有无符号类型),而C#的byte是无符号(有单独sbyte有符号字节); 因此出现两个立即选项:

  • 使用base-64,这将避免混乱
  • 在C#中将数据读取为sbyte[] ,然后将值强制转换为byte (每个项目)

我可能会使用base-64选项,因为它还应该比将它们表示为网络上的数字小,但作为转换的示例:

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

(如果您使用的是已检查的上下文,请添加unchecked选中的选项,但这很少见;默认和泥潭常见选项是未选中)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM