转换为未压缩的位图和从未压缩的位图转换为字节数组

时间:2016-01-29 14:27:31

标签: android image bitmap byte

我正在尝试实现两种方法。

将ImageView作为输入并输出未压缩的字节数组。

第二个采用字节数组输入并转换为位图。

这是我使用的两种方法,但是bytesToImage()无法生成imageToBytes输出的有效位图表示:

    private static byte[] imageToBytes(ImageView iv) {


        byte[] imageInByte = null;
        Bitmap originalImage;

        BitmapDrawable drawable = (BitmapDrawable) iv.getDrawable();

        originalImage = drawable.getBitmap();

        int numOfbytes = originalImage.getByteCount();

        ByteBuffer buffer = ByteBuffer.allocate(numOfbytes);
        originalImage.copyPixelsToBuffer(buffer);
        imageInByte = buffer.array();

        return imageInByte;
}



 private static Bitmap bytesToImage(byte data[]) {


        ByteBuffer byte_buffer = ByteBuffer.wrap(data);

        byte_buffer.rewind();

        Bitmap bmp = Bitmap.createBitmap(60, 60, Bitmap.Config.ARGB_8888);
        bmp.copyPixelsFromBuffer(byte_buffer);

        return bmp;

}

然后以下列方式调用这些方法:

ImageView iv = (ImageView) findViewById(R.id.imageViewInput);
iv.setImageResource(R.drawable.panda);


imageInBytes = imageToBytes(iv);

Bitmap bmp = bytesToImage(imageInBytes);

ImageView image = (ImageView) findViewById(R.id.imageViewOutput);

image.setImageBitmap(bmp);

然而,imageViewOutput只显示一个空白框。

图片熊猫是.bmp图片

2 个答案:

答案 0 :(得分:0)

在imageToBytes方法上试试这个

ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();

在您的bytesToImage

BitmapFactory.decodeByteArray(bitmapdata , 0, bitmapdata .length);

答案 1 :(得分:0)

所以问题是bytesToImage中的位图配置不正确。

这需要直接传入原始位图。

这是更新的bytesToImage方法,它给出了正确的答案。

private static Bitmap bytesToImage(byte data[], Bitmap originalImage) {

    Bitmap newBmp;
    newBmp = Bitmap.createBitmap(originalImage.getWidth(), originalImage.getHeight(), originalImage.getConfig());


    ByteBuffer buffer1 = ByteBuffer.wrap(data);

    buffer1.rewind();
    newBmp.copyPixelsFromBuffer(buffer1);

    byte[] imageInByte = null;



    ByteBuffer byte_buffer = ByteBuffer.wrap(data);



    byte_buffer.rewind();



    newBmp.copyPixelsFromBuffer(byte_buffer);


    return newBmp;
}