如何将 BufferedImage 转换为 int[]?

How to convert BufferedImage to an int[]?

我希望通过套接字发送具有 BufferedImage 的对象。 BufferedImage 不可序列化,因此需要将其转换为可序列化数据类型,然后再转换回来。我在网上看了很多,byte[] 似乎只发送一个 BuffereImage,但我正在尝试发送整个对象,所以我更倾向于 int[]。我以为我 运行 几周前在这里找到了一个对此进行解释的答案,但经过 2.5 小时的搜索后我找不到它。我试过 Java Oracle,但很快就迷路了。

如果有更好的方法请原谅我的无知运行ce,因为我并没有真正使用套接字和 BufferedImage 操作。

BufferedImage 基本上是一个数组。像素存储到DataBuffer中,它是一个数组。

BufferedImage source = //...
switch ( source.getType() )
    {
    case BufferedImage.TYPE_BYTE_GRAY :
    case BufferedImage.TYPE_3BYTE_BGR :
    case BufferedImage.TYPE_4BYTE_ABGR :
        final byte[] bb = ((DataBufferByte)source.getRaster().getDataBuffer()).getData() ;
        //...
        break ;
    case BufferedImage.TYPE_USHORT_GRAY :
        final short[] sb = ((DataBufferUShort)source.getRaster().getDataBuffer()).getData() ;
        //...
        break ;
    case BufferedImage.TYPE_INT_RGB :
    case BufferedImage.TYPE_INT_BGR :
    case BufferedImage.TYPE_INT_ARGB :
        final int[] ib = ((DataBufferInt)source.getRaster().getDataBuffer()).getData() ;
        break ;
    // etc.
    }

您还需要发送图像尺寸以及通道数。

以 PNG 格式发送图像:

// BufferedImage -> byte sequence
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(img, "PNG", baos);
byte[] imageData = baos.toByteArray();
// byte sequence -> BufferedImage
ByteArrayInputStream bais = new ByteArrayInputStream(imageData);
BufferedImage img = ImageIO.read(bais);