其实主要是想截屏后 将BufferedImage直接转换为byte[]然后通过socket进行传输
但是问题出现在BufferedImage转换为byte[]的过程中, 我现在用的是ImageIO.write到ByteArrayOutputStream然后调用toByteArray();
由于要频繁截图
感觉上ImageIO.write的效率太低,我试过png和jpg的格式jpg好算可以,但是还是不够快,有种卡卡的感觉,测试了一下本地传输也就一分钟250张左右 平均1S 3-4张会有种延迟的感觉,我想要一种高效的截屏后转为byte[]的方法
------解决方案--------------------
基本上也就这个水准了,似乎没啥更高效的了。
可以参见下这里:
http://topic.csdn.net/u/20120423/20/2205b7b5-2af6-489a-a2dd-3355fc467277.html
我测试过速度最快的大概是由sun提供的私有包(JDK自带了)处理的:
- Java code
import com.sun.image.codec.jpeg.*; public static byte[] getCompressedImageAWT(BufferedImage image) { byte[] imageData = null; try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(baos); encoder.encode(image); imageData = baos.toByteArray(); } catch (IOException ex) { ex.printStackTrace(); } return imageData; }
------解决方案--------------------
没了,这个截屏算挺快的了,我这里测试才50ms左右。
而且Robot关于截屏这里,底层其实也是借助sun的包来做的。
想再快就双线程做了,轮流截屏和发送。