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

convert to and from uncompressed bitmap to byte array

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

将 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图片

在您的 imageToBytes 方法上试试这个

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

在你的 bytesToImage 上

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

所以问题出在 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;
}