- merge r1808 from denis's branch

- name project in .project to deskshare-applet

git-svn-id: http://bigbluebutton.googlecode.com/svn/trunk@1814 af16638f-c34d-0410-8cfa-b39d5352b314
This commit is contained in:
Richard Alam 2009-06-29 14:13:11 +00:00
parent cb7f5895ec
commit aaca826e2a
4 changed files with 57 additions and 5 deletions

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>deskShareClient</name>
<name>deskshare-applet</name>
<comment></comment>
<projects>
</projects>

View File

@ -1,7 +1,9 @@
package screenshot;
import java.awt.AWTException;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
@ -21,7 +23,8 @@ public class Capture {
private Toolkit toolkit;
private Rectangle screenBounds;
private int width, height, x,y;
private int width, height, x,y, videoWidth, videoHeight;
private boolean needScale = true;
/**
* The default constructor. Performs initialisation work
@ -36,10 +39,12 @@ public class Capture {
}
this.toolkit = Toolkit.getDefaultToolkit();
this.screenBounds = new Rectangle(x, y, this.width, this.height);
this.needScale = areDimensionsScaled(this.width, this.height);
}
public BufferedImage takeSingleSnapshot(){
return robot.createScreenCapture(this.screenBounds);
if (needScale) return getScaledImage(robot.createScreenCapture(this.screenBounds));
else return robot.createScreenCapture(this.screenBounds);
}
public int getScreenshotWidth(){
@ -146,5 +151,49 @@ public class Capture {
else if (area > 150000) return 8;
else return 10;
}
private boolean areDimensionsScaled(int width, int height){
int bigger = Math.max(width, height);
if (bigger < 800){
videoWidth = width;
videoHeight = height;
return false;
}
else{
if (width >= height){
videoWidth = 800;
videoHeight = Math.round(height/(width/800));
} else if (height > width){
videoHeight = 800;
videoWidth = Math.round(width/(height/800));
}
return true;
}
}
private BufferedImage getScaledImage(BufferedImage image){
BufferedImage scaledImage = new BufferedImage(
videoWidth, videoHeight, BufferedImage.TYPE_3BYTE_BGR);
// Paint scaled version of image to new image
Graphics2D graphics2D = scaledImage.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(image, 0, 0, videoWidth, videoHeight, null);
// clean up
graphics2D.dispose();
return scaledImage;
}
public int getVideoWidth(){
return videoWidth;
}
public int getVideoHeight(){
return videoHeight;
}
}

View File

@ -33,8 +33,8 @@ public class CaptureThread implements Runnable {
socket = new Socket(IP, PORT);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println(roomNumber);
out.println(Integer.toString(capture.getWidth())
+ "x" + Integer.toString(capture.getHeight())
out.println(Integer.toString(capture.getVideoWidth())
+ "x" + Integer.toString(capture.getVideoHeight())
+ "x" + Integer.toString(capture.getProperFrameRate()));
outStream = new DataOutputStream(socket.getOutputStream());
} catch(Exception e){
@ -52,6 +52,7 @@ public class CaptureThread implements Runnable {
outStream.writeLong(imageData.length);
outStream.write(imageData);
System.out.println("Sent: "+ imageData.length);
outStream.flush();
} catch(Exception e){
e.printStackTrace(System.out);
System.exit(0);

View File

@ -34,6 +34,8 @@ public class RunnerApplet extends JApplet {
/**
* This method is called when the user closes the browser window containing the applet
* It is very important that the connection to the server is closed at this point. That way the server knows to
* close the stream.
*/
public void destroy(){
capThread.closeConnection();