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



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

一种将 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);

但是,图像视图输出仅显示一个空的白框。

图像熊猫是.bmp图像

在你的imageToBytes方法上试试这个

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

在你的字节到图像

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

所以问题在于以字节到图像为单位的位图配置不正确。

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

这是更新的字节到图像方法,它给出了正确的答案。

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;
}

最新更新