java - Android 位图到 ByteArray 或反之亦然返回 null?

标签 java android bitmap buffer

我试图从java分配直接字节缓冲区,从位图填充它并从该缓冲区创建位图。但结果我收到 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 为空吗?

最佳答案

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() 一样,先创建一个合适大小的Bitmap。

关于java - Android 位图到 ByteArray 或反之亦然返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16091011/

相关文章:

android - Lazy List 上的位图缓存(SoftReference,Hard)似乎无法正常工作 - Android

java - Thymeleaf 中图像的相对路径

java - JAVA 和 MYSQL 中的 WEEK_OF_YEAR 错误

android - 在gradle中使用其他属性实现Maven Artifact

java - Android - 在 HTC 手机中录音

c# - 从 UIElement 生成 BitmapSource

java - 返回一个新字符串,所有出现的输入字符都移到末尾

java - Spring Integration ServiceActivator 返回类型如何工作?

android - 如何通过 SDK Manager 安装旧版本的 Android?

java - 位图未设置为 ImageView