今天做了一个简单的网络传输的练习,用的是套接字,目的是在客户端截屏,然后发到服务器去,在服务器上显示出来, 由于截屏得到的是BufferedImage,结果在传输的时候就出了问题,因为这个类没有被序列化,所以不能直接用对象来传输,请教下怎么传呢?

解决方案 »

  1.   

    bufferedimage实现了WritableRenderedImage
    应该可以用它来实现吧
      

  2.   

    楼上的大哥,怎样把image转换成2进制呢?然后再怎么读取呢?
    能给个简单的小例子吗?
    谢谢了
      

  3.   

    try {
    // 将 BufferedImage 转换成 2 进制输出流
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();
                    writeJPEG(baos,bi1,quality,null);
                    byte[] imageData = baos.toByteArray();// 再从 2 进制输入流中读取 BufferedImage 
                    ByteArrayInputStream bais = new ByteArrayInputStream(imageData);                bi2 = ImageIO.read(bais);
                } catch (FileNotFoundException ex) {
                    ex.printStackTrace();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
      

  4.   

    public static void writeJPEG(OutputStream out, BufferedImage image, int quality, IIOWriteProgressListener listener) throws IOException {
            ImageOutputStream ios = ImageIO.createImageOutputStream(out);
            Iterator it = ImageIO.getImageWritersBySuffix("jpg");
            if (it.hasNext()) {
                ImageWriter iw = (ImageWriter) it.next();
                ImageWriteParam iwp = iw.getDefaultWriteParam();
                iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
                iwp.setCompressionQuality((float) quality / 100f);
                iw.setOutput(ios);
                iw.addIIOWriteProgressListener(listener);
                iw.write(null, new IIOImage(image, null, null), iwp);
                iw.dispose();
                out.flush();
                out.close();
            }
        }