[英]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.