Android位图到ByteArray,反之亦然,返回null?

时间:2013-04-18 18:57:23

标签: java android bitmap buffer

我正在尝试从java分配直接bytebuffer,从位图填充它并从该缓冲区创建位图。但结果我得到了null。

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inPreferredConfig = Bitmap.Config.ARGB_8888;
    mCurrentBitmap = BitmapFactory.decodeFile(hardCodedPath, options);

    // 4 - bytes count per pixel
    bytesCount = mCurrentBitmap.getWidth() * mCurrentBitmap.getHeight() * 4;

    pixels = ByteBuffer.allocateDirect((int) bytesCount);
    mCurrentBitmap.copyPixelsToBuffer(this.pixels);

    byte[] bitmapdata = new byte[pixels.remaining()];
    pixels.get(bitmapdata);

    BitmapFactory.Options opt = new BitmapFactory.Options();
    opt.inPreferredConfig = Bitmap.Config.ARGB_8888;

    Bitmap newBitmap = BitmapFactory.decodeByteArray(bitmapdata, 0, (int) bytesCount, opt);

有人可以帮我理解为什么newBitmap为空?

1 个答案:

答案 0 :(得分:2)

decodeByteArray()期望编码的位图数据(PNG,JPEG等),而不是简单的RGB(A)字节数组。要做你想做的事,你可以简单地使用Bitmap.setPixels()。首先,创建一个大小/配置正确的位图(例如Bitmap.create(width, height, Bitmap.Config.ARGB_8888)),然后在其上调用setPixels(bitmapdata, 0, width, 0, 0, width, height)

由于您拥有ByteBuffer,因此您可以通过调用Bitmap.copyPixelsFromBuffer()更轻松地完成此操作。与setPixels()一样,首先创建一个合适大小的位图。