[英]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
有符号字节); 因此出现两个立即选项:
sbyte[]
,然后将值强制转换为byte
(每个项目) 我可能会使用base-64选项,因为它还应该比将它们表示为网络上的数字小,但作为转换的示例:
sbyte[] orig = ...
byte[] munged = Array.ConvertAll(orig, x => (byte)x);
(如果您使用的是已检查的上下文,请添加unchecked
选中的选项,但这很少见;默认和泥潭常见选项是未选中)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.