簡體   English   中英

如何將BufferedImage轉換為int []?

[英]How to convert BufferedImage to an int[]?

我正在尋找通過套接字發送具有BufferedImage的對象。 BufferedImage不可序列化,因此需要將其轉換為可序列化的數據類型,然后再次返回。 我在網上已經看了很多東西,並且byte []似乎只是發送BuffereImage的方法,但是我正嘗試發送整個對象,因此我更傾向於int []。 我以為我在幾周前就遇到了一個對此做出解釋的答案,但是經過2.5個小時的搜索,我找不到了。 我嘗試過Java Oracle,但是很快迷路了。

如果有更好的方法,請原諒我的無知,因為我在套接字和BufferedImage操作方面還沒有做很多工作。

基本上,BufferedImage是一個數組。 像素存儲在DataBuffer中,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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM