3

我正面临一个真正的问题。我需要将图像转换为字节数组格式,以便我可以将字节数组上传到 Web 服务器。我已经尝试了很多但是它不起作用。我也得到字节数组的负值。我不确定在数组中获取字节值我做错了什么。

下面是我的代码。请帮助我我做错了什么?

Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.home_menu_icon);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, bos);
byte[] data = bos.toByteArray();
4

4 回答 4

1

如果您的图像来自 GALLERY 和 CAMERA,我在这里显示两者的代码

if (requestCode == IMAGE_PICKER_REQUEST && resultCode == RESULT_OK) {
        fileName = getRealPathFromURI(data.getData());

        try {
             if (bitmap != null) {
                    bitmap.recycle();
                }
            InputStream stream = getContentResolver().openInputStream(
                    data.getData());

            bitmap = BitmapFactory.decodeStream(stream);
            stream.close();
            image.setImageBitmap(bitmap);
            //picNameText.setText("Selected: en"
                //  + getStringNameFromRealPath(fileName));

            ByteArrayOutputStream stream1 = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream1);
            imageInByte = stream1.toByteArray();

        }catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        catch (IOException e) {
            e.printStackTrace();
        } 
    }

    if (requestCode == IMAGE_TAKER_REQUEST && resultCode == RESULT_OK) {
        Bitmap photo = (Bitmap) data.getExtras().get("data");
        image.setImageBitmap(photo);

        ByteArrayOutputStream stream2 = new ByteArrayOutputStream();
        photo.compress(Bitmap.CompressFormat.PNG, 100, stream2);
        imageInByte = stream2.toByteArray();

    }

享受它为我工作......

于 2013-07-12T11:02:30.020 回答
0
  1. 一个 32 位的 Bitmap 使用一个 int32 来保存一个 ARGB 颜色,我们可以使用一个 int 数组来表示一个位图。使用Bitmap.getPixels()and Bitmap.setPixels()将位图转换为 int 数组和虎钳诗句。并且一个 int 数组可以很容易地转换为 byte 数组。
  2. @Chintan Rathod 还通过 using 展示了一个很好的解决方案Bitmap.copyPixelsToBuffer(),与第一个几乎相同。
  3. 由于您的目标是将位图上传到服务器,因此发送压缩文件是最佳解决方案。您的代码只是在做正确的事情。你说你在字节数组中得到负值,这不是错误。只需将字节数组上传到服务器并将其保存为 jpeg 文件。
于 2013-07-12T11:21:50.530 回答
0

试试下面的代码。

int bytes = bitmap.getByteCount();
//Create a new buffer
ByteBuffer buffer = ByteBuffer.allocate(bytes); 
//Move the byte data to the buffer
b.copyPixelsToBuffer(buffer); 
byte[] array = buffer.array();
于 2013-07-12T11:04:06.163 回答
0

一个 32 位的 Bitmap 使用一个 int32 来保存一个 ARGB 颜色,我们可以使用一个 int 数组来表示一个位图。使用 Bitmap.getPixels() 和 Bitmap.setPixels() 将位图转换为 int 数组和虎钳诗句。并且一个 int 数组可以很容易地转换为 byte 数组。

于 2015-11-03T12:44:48.790 回答