# HG changeset patch # User e085711 # Date 1316636089 -32400 # Node ID d89e03d99b7f19ed59fadd0303d38ec9ad373cb3 # Parent 7a1e934144e6999f25b92ea79b03ffdc59f7d7c9 modify readJpegData() diff -r 7a1e934144e6 -r d89e03d99b7f src/myVncClient/CuiMyVncClient.java --- a/src/myVncClient/CuiMyVncClient.java Tue Sep 20 13:42:01 2011 +0900 +++ b/src/myVncClient/CuiMyVncClient.java Thu Sep 22 05:14:49 2011 +0900 @@ -317,8 +317,8 @@ if (rfb.serverMinor == 855) { - boolean useEchoFlag = rfb.readProxyFlag(); - if (useEchoFlag) { + boolean useEchoPortFlag = rfb.readProxyFlag(); + if (useEchoPortFlag) { byte[] b = new byte[4]; b = rfb.readEchoPort(); echoPort = castByteInt(b); @@ -384,8 +384,8 @@ + "." + rfb.clientMinor); if (rfb.serverMinor == 855) { - boolean useEchoFlag = rfb.readProxyFlag(); - if (useEchoFlag) { + boolean useEchoPortFlag = rfb.readProxyFlag(); + if (useEchoPortFlag) { byte[] b = new byte[4]; b = rfb.readEchoPort(); echoPort = castByteInt(b); @@ -1051,5 +1051,18 @@ int echoValue = bb.getInt(); return echoValue; } + public Image getScreenImage() { + return vc.rawPixelsImage; + } + + public void writeScreenData(byte[] b, String imageFormat) { +/* + try{ + vc.drawBufferedImage(b, imageFormat); + }catch(IOException e){ + e.printStackTrace(); + } +*/ + } } diff -r 7a1e934144e6 -r d89e03d99b7f src/myVncClient/InterfaceForViewer.java --- a/src/myVncClient/InterfaceForViewer.java Tue Sep 20 13:42:01 2011 +0900 +++ b/src/myVncClient/InterfaceForViewer.java Thu Sep 22 05:14:49 2011 +0900 @@ -1,6 +1,6 @@ package myVncClient; -import java.awt.Graphics; +import java.awt.Image; import java.net.Socket; public interface InterfaceForViewer extends java.lang.Runnable{ @@ -26,5 +26,6 @@ public void setClientSocket(Socket sock); public void close(); - + public Image getScreenImage(); + public void writeScreenData(byte[] b, String imageFormat); } diff -r 7a1e934144e6 -r d89e03d99b7f src/myVncClient/MyRfbProto.java --- a/src/myVncClient/MyRfbProto.java Tue Sep 20 13:42:01 2011 +0900 +++ b/src/myVncClient/MyRfbProto.java Thu Sep 22 05:14:49 2011 +0900 @@ -16,7 +16,6 @@ import java.net.BindException; import java.net.ServerSocket; import java.net.Socket; -import java.net.UnknownHostException; import java.nio.ByteBuffer; import java.util.Iterator; import java.util.LinkedList; @@ -41,6 +40,8 @@ * CheckMillis is one of new msgType for RFB 3.855. */ final static byte SpeedCheckMillis = 4; + final static byte WriteJpegData = 5; + private static final int INFLATE_BUFSIZE = 1024*100; boolean printStatusFlag = false; long startCheckTime; @@ -92,6 +93,7 @@ MyRfbProto(String h, int p, MyVncClient v) throws IOException { super(h, p, v); + this.viewer = v; cliList = new LinkedList(); cliListTmp = new LinkedList(); createBimgFlag = false; @@ -521,6 +523,46 @@ } } + void sendFullScreen(String imageFormat, OutputStream os) { + BufferedImage bimg = getBufferedImage(viewer.getScreenImage()); + try { + byte[] b = getImageBytes(bimg, imageFormat); +// int len = b.length; + byte[] length = castIntByte(b.length); + System.out.println("jpeg length = " + b.length); + + byte c = 0x05; + os.write((byte)WriteJpegData); + os.write(length); // length of jpeg data + os.write(b); // jpeg data + os.flush(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + void readWriteJpegData() throws IOException { + byte[] b = readJpegData(); + viewer.writeScreenData(b, "jpeg"); + } + + byte[] readJpegData() throws IOException { + int len = readU32(); + byte[] b = new byte[len]; + readFully(b); + return b; + } + + + public BufferedImage getBufferedImage(Image img) { + BufferedImage bimg = new BufferedImage(framebufferWidth, framebufferHeight, BufferedImage.TYPE_INT_RGB); + Graphics g = bimg.getGraphics(); + g.drawImage(img, 0, 0, null); + g.dispose(); + return bimg; + } + + void readSpeedCheck() throws IOException { byte[] b = new byte[1]; readFully(b); @@ -808,14 +850,13 @@ readClientInit(is); sendInitData(os); new Thread(reader).start(); // discard incoming packet here after. - if(rfbMinor == 885){ + if(rfbMinor == 855){ // send jpeg data of full screen. - + sendFullScreen("jpeg" ,os); } else { // send raw data of full screen. } - for (;;) { LinkedList bufs = c.poll(); int inputIndex = 0; diff -r 7a1e934144e6 -r d89e03d99b7f src/myVncClient/MyVncClient.java --- a/src/myVncClient/MyVncClient.java Tue Sep 20 13:42:01 2011 +0900 +++ b/src/myVncClient/MyVncClient.java Thu Sep 22 05:14:49 2011 +0900 @@ -2,6 +2,7 @@ import java.awt.*; import java.awt.event.*; +import java.awt.image.BufferedImage; import java.io.*; import java.net.*; import java.util.Random; @@ -379,8 +380,8 @@ + "." + rfb.clientMinor); if (rfb.serverMinor == 855) { - boolean useEchoFlag = rfb.readProxyFlag(); - if (useEchoFlag) { + boolean useEchoPortFlag = rfb.readProxyFlag(); + if (useEchoPortFlag) { byte[] b = new byte[4]; b = rfb.readEchoPort(); echoPort = castByteInt(b); @@ -453,8 +454,8 @@ + "." + rfb.clientMinor); if (rfb.serverMinor == 855) { - boolean useEchoFlag = rfb.readProxyFlag(); - if (useEchoFlag) { + boolean useEchoPortFlag = rfb.readProxyFlag(); + if (useEchoPortFlag) { byte[] b = new byte[4]; b = rfb.readEchoPort(); echoPort = castByteInt(b); @@ -1197,4 +1198,18 @@ vncFrame.dispose(); } + @Override + public Image getScreenImage() { +// return vc.memImage; + return vc.rawPixelsImage; + } + + public void writeScreenData(byte[] b, String imageFormat) { + try{ + vc.drawBufferedImage(b, imageFormat); + }catch(IOException e){ + e.printStackTrace(); + } + } + } diff -r 7a1e934144e6 -r d89e03d99b7f src/myVncClient/VncCanvas.java --- a/src/myVncClient/VncCanvas.java Tue Sep 20 13:42:01 2011 +0900 +++ b/src/myVncClient/VncCanvas.java Thu Sep 22 05:14:49 2011 +0900 @@ -30,6 +30,8 @@ import java.util.zip.*; import java.net.*; +import javax.imageio.ImageIO; + import test.TestComet; @@ -386,7 +388,7 @@ long count = 0; - new Thread(){public void run() {TestComet.main(null);}}.start(); +// new Thread(){public void run() {TestComet.main(null);}}.start(); while (true) { @@ -409,6 +411,13 @@ // Process the message depending on its type. switch (msgType) { + case MyRfbProto.SpeedCheckMillis: + rfb.readSpeedCheck(); + break; + case MyRfbProto.WriteJpegData: + rfb.readWriteJpegData(); + + break; case RfbProto.FramebufferUpdate: if (statNumUpdates == viewer.debugStatsExcludeUpdates @@ -1937,6 +1946,7 @@ memGraphics.drawImage( bimg, 0,0, null); } + BufferedImage createBufferedImage(Image img){ BufferedImage bimg = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB ); @@ -1947,6 +1957,13 @@ return bimg; } + void drawBufferedImage(byte[] b, String imageFormat) throws IOException{ + BufferedImage bimg = ImageIO.read(new ByteArrayInputStream(b)); +// ImageIO.write(bimg, "jpeg", new File("sample.jpeg")); + memGraphics.setClip(0,0, rfb.framebufferWidth, rfb.framebufferHeight ); + memGraphics.drawImage( bimg, 0,0, null); + scheduleRepaint(0, 0, rfb.framebufferWidth, rfb.framebufferHeight ); + } }