日期:2014-05-20  浏览次数:20774 次

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的包来做的。

想再快就双线程做了,轮流截屏和发送。