如何在Android中将图像转换为字节数组

时间:2013-07-12 10:48:12

标签: android bitmap

我面临一个真正的问题。我需要将图像转换为字节数组格式,以便我可以将字节数组上传到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 个答案:

答案 0 :(得分: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();

    }

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

答案 1 :(得分: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();

答案 2 :(得分:0)

  1. 32位Bitmap使用int32来保存ARGB颜色,我们可以使用 int数组表示位图。使用Bitmap.getPixels()Bitmap.setPixels()将Bitmap转换为int数组和vise 诗。并且int数组可以很容易地转换为字节数组。
  2. @Chintan Rathod也使用Bitmap.copyPixelsToBuffer()显示了一个很好的解决方案,与第一个几乎相同。
  3. 由于您的目标是将位图上传到服务器,因此请发送压缩文件 文件是最好的解决方案。你的代码正在做正确的事情。 你说你在字节数组中得到负值,这是 不是错误。只需将字节数组上传到服务器并保存为 一个jpeg文件。

答案 3 :(得分:0)

32位位图使用int32来保存ARGB颜色,我们可以使用int数组来表示位图。使用Bitmap.getPixels()和Bitmap.setPixels()将Bitmap转换为int数组和vise verse。并且int数组可以很容易地转换为字节数组。