java byte 压缩_java屏幕分享程序,把图片转成字节数组后压缩发送,在解压显示...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

import java.awt.Dimension;

import java.awt.MouseInfo;

import java.awt.Point;

import java.awt.Rectangle;

import java.awt.Robot;

import java.awt.Toolkit;

import java.awt.image.BufferedImage;

import java.io.ByteArrayOutputStream;

import java.io.DataOutputStream;

import java.io.File;

import java.io.IOException;

import java.net.InetAddress;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.Date;

import java.util.zip.Deflater;

import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

import javax.imageio.ImageIO;

/*

* ly 2014-11-20

* 该类实时发送截屏消失,多线程实现,不包含鼠标信息,且没有做对每个Client做

*/

publicclass MultiSendScreen

{

public static int SERVER_PORT=8000;

private static int SEND_IMAGE_SYMBOL=11;

private Robot robot;

public Dimension screen;

public Rectangle rect ;

public static void main(String args[])

{

new MultiSendScreen(SERVER_PORT);

}

//构造方法 开启套接字连接 机器人robot 获取屏幕大小

public MultiSendScreen(int SERVER_PORT)

{

try {

ServerSocket serverSocket = new ServerSocket(SERVER_PORT);

serverSocket.setSoTimeout(864000000);

robot = new Robot();

screen = Toolkit.getDefaultToolkit().getScreenSize(); //获取主屏幕的大小

rect = new Rectangle(screen);

int numClient = 1;

while(true)

{

Socket client = serverSocket.accept();

System.out.println("连接一个客户端并开启一个线程,编号为:"+numClient+" 时间是:"+ new Date()+"\n");

InetAddress inerAddress = client.getInetAddress();

System.out.println("客户"+numClient+"的IP主机地址是:"+inerAddress.getHostAddress()+"\n");

HandleAclient task = new HandleAclient(client);

new Thread(task).start();

numClient++;

}

} catch (Exception e) {

e.printStackTrace();

}

//构造屏幕大小的矩形

}

class HandleAclient implements Runnable

{

private Socket client;

public HandleAclient(Socket client)

{

this.client = client;

}

@Override

public void run()

{

//实时等待接收截屏消息

while(true)

{

try{

BufferedImage img = robot.createScreenCapture(rect); //屏幕截图

BufferedImage cursor= ImageIO.read(new File("img/cursor.png")); //把鼠标加载到缓存中

Point p= MouseInfo.getPointerInfo().getLocation(); //获取鼠标坐标

img.createGraphics().drawImage(cursor, p.x, p.y, null); //在图片画上鼠标

//把图片写到字节数组中

ByteArrayOutputStream byte_out = new ByteArrayOutputStream(); //创建字节流

ImageIO.write(img,"jpg", byte_out); //使用ImageIO把图片写入字节流!!

byte_out.flush();

byte[] data = byte_out.toByteArray(); //字节流转换成字节数组

//将生成的字节数组进行压缩

ZipOutputStream zos = new ZipOutputStream(byte_out);

zos.setLevel(Deflater.BEST_COMPRESSION);

zos.putNextEntry(new ZipEntry("ScreenCapture.jpg"));

zos.write(data);

zos.closeEntry();

zos.close();

//发送字节数组

DataOutputStream dout = new DataOutputStream(client.getOutputStream());

dout.write(SEND_IMAGE_SYMBOL);

System.out.println("写入标识符:"+SEND_IMAGE_SYMBOL);

dout.writeInt(data.length);

System.out.println("写入图片长度:"+data.length);

dout.write(data);

dout.flush();

//图片 -- 数组 数组字节流 压缩字节数组流 写出被压缩后的字节数组

/*

DataOutputStream dout = new DataOutputStream(client.getOutputStream());

//把字节放到管道中输出

dout.write(SEND_IMAGE_SYMBOL);

System.out.println("写入标识符:"+SEND_IMAGE_SYMBOL);

dout.writeInt(data.length);

System.out.println("写入图片长度:"+data.length);

dout.write(data);

dout.flush();

*/

} catch (IOException ioe) {

try {

wait();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println("连接断开");

} finally {

if (client != null) {

try {

client.close();

} catch (IOException e) {e.printStackTrace();}

}

}

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值