0

我有这个应用程序,我必须在其中接收字节数组形式的图像。该图像之前已以这种方式发送到服务器:

 image = image.createScaledBitmap((Bitmap) extras.get("data"), 380, 400, true);
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        imagen.compress(Bitmap.CompressFormat.PNG, 100, stream);
        byte[] byteArray = stream.toByteArray();

图像被发送到服务器。应用程序的另一部分调用服务器以获取包含图像的 JSON。我将它存储在一个字符串中,然后我用它string.getBytes()来获取字节数组,如下所示:

byte[] array=stringimage.getbytes();

数组类似于:119,80,78,71,13,10...

我现在想“好的,我现在使用 BitmapFactory,decodeByteArray 并获取我的位图”,但它返回 null。我开始谷歌搜索并在 Stack Overflow 中查看这里,我看到了解决问题的各种方法。其中之一:

image = Bitmap.createBitmap(380, 400, Bitmap.Config.RGB_565);
int row = 0, col = 0;
for (int i = 0; i < array.length; i += 3) {
    image.setPixel(col++, row, array[i + 2] & array[i + 1] & array[i]);
    
    if (col == 380) {
        col = 0;
        row++;
        
    }
}

这有点像解码图像并手动设置像素。

它不起作用。

另一个:

byte[] array=Base64.decode(fotostring.getBytes(),Base64.DEFAULT);

它不起作用

我的问题是:我必须如何让我负责服务器端的伙伴给我发送阵列?以哪种格式?他没有以任何方式触摸我之前发送给他的图像。他需要做吗?

或者,我必须如何管理字节数组?我不需要“翻译”成另一种格式,decodeByteArray 可以理解吗?

4

1 回答 1

1

The problem you are facing is because of the encoding / decoding. The byte array that you received from the image is binary and cannot be interpreted as text. For transferring it over a text-based protocol (I assume you would have used HTTP), you will have to encode it into a textual format. The symmetrical operation need to be performed when you receive it from the server.

When you send it to the server, encode in a format (say Base64) and use the same format to decode the received string.

于 2012-04-19T12:25:37.263 回答