Java从Bytearray创建BuffereImage

Java从Bytearray创建BuffereImage,java,Java,我要做的是从字节数组创建一个BuffereImage。以下是我现在正在做的: try { ByteArrayInputStream in = new ByteArrayInputStream(bytearray); BufferedImage bImageFromConvert = ImageIO.read(in); Color color = new Color(bImageFromConvert.getRGB((int) local_

我要做的是从字节数组创建一个BuffereImage。以下是我现在正在做的:

    try {
        ByteArrayInputStream in = new ByteArrayInputStream(bytearray);
        BufferedImage bImageFromConvert = ImageIO.read(in);

        Color color = new Color(bImageFromConvert.getRGB((int) local_car.x, (int) local_car.z));
        System.out.println("R :: "+color.getRed() + " B :: "+color.getBlue() + " G :: "+color.getGreen());
    } catch (IOException e) {
        e.printStackTrace();
    }
}
ImageIO.read的文档说明:

使用从当前注册的URL中自动选择的ImageReader对提供的URL进行解码,返回一个BuffereImage。InputStream是从URL获得的,URL被包装在ImageInputStream中。如果没有注册的ImageReader声称能够读取结果流,则返回null


我从ImageIO.read()接收到一个空指针异常,返回
null
。我将以RGBA的形式发送我的bytearray。为什么ImageIO.read返回null?

ImageIO函数用于读取文件,并希望输入流采用PNG或JPG等文件格式之一,而不是用于读取简单的rgba数组。要在简单数组中读取,请尝试以下操作:

int width = 256;
int height = 256;
final int bytes_per_pixel = 4;
byte[] raw = new byte[width * height * bytes_per_pixel];
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
IntBuffer intBuf
        = ByteBuffer.wrap(raw)
        .order(ByteOrder.LITTLE_ENDIAN)
        .asIntBuffer();
int[] array = new int[intBuf.remaining()];
intBuf.get(array);
image.setRGB(0, 0, width, height, array, 0, width);

我对这段代码有一个问题,首先BuffereImage类型是RGBA,按照这个顺序,从文档中看,我似乎找不到RGBA。此外,当我尝试将数据输入bytebuffer时,会出现BufferUnderFlow异常。有什么想法吗?用另一种方法编辑了答案,希望对RGBA更好。我感谢你的帮助。如果可以的话,我会向上投10次票,假设你知道图像的宽度和高度。不酷。@AndroidDev同一字节数组可以生成许多不同的图像,例如400x100或200x200。计算机能知道你想要哪一个的唯一方法就是你告诉它。假设您从相机获取数据,您可以检查相机规格中的尺寸,或者任何其他数据源也将包含用于获取尺寸的单独API。