这让我有点生气!
我拍摄了一张图片并使用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格式)发送这些数据,并且无法将其转换为c#byte [],因为数组中的负数。
出了什么问题或者我错过了什么。我甚至尝试将压缩fator设置为0,以防压缩正在做某事。
奇怪的是,如果我将字节转换为base64然后传输,我可以成功地将base64字符串转换为c#中的byte []以保存图像。
出了什么问题?
提前致谢
乔恩
答案 0 :(得分:1)
Java的byte
已签名(它没有无符号类型),而C#的byte
是无符号的(签名字节有单独的sbyte
);所以出现两个直接选项:
sbyte[]
,然后将值转换为byte
(每个项目)我可能会使用base-64选项,因为它也应该小于将它们表示为线上的数字,但作为转换的示例:
sbyte[] orig = ...
byte[] munged = Array.ConvertAll(orig, x => (byte)x);
(如果您使用的是已检查的上下文,请添加unchecked
,但这种情况很少见;未选中是默认选项和mire common选项。)