当前位置: 代码迷 >> J2SE >> Java中截屏 存储到BufferedImage中 除了createScreenCapture之外还有什么其他的函数么?解决办法
  详细解决方案

Java中截屏 存储到BufferedImage中 除了createScreenCapture之外还有什么其他的函数么?解决办法

热度:31   发布时间:2016-04-24 01:02:57.0
Java中截屏 存储到BufferedImage中 除了createScreenCapture之外还有什么其他的函数么?
其实主要是想截屏后 将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的包来做的。

想再快就双线程做了,轮流截屏和发送。
  相关解决方案