2013-12-09 82 views
1

我正嘗試在Java中創建遠程控制應用程序。我正在使用機器人捕捉我的屏幕圖像,然後我需要將其發送到服務器。但是,由於圖像尺寸可能太大而無法儘快發送,因此我正在更改代碼中的圖像質量。更改圖像質量

問題是我的代碼,更改後的圖像它會自動將它保存爲我的電腦中的文件,但我不希望它。我也想改變它,但不保存,以便能夠將它發送到我的服務器

代碼:

Robot robot = null; 
Rectangle rectangle = null; 
GraphicsEnvironment gEnv=GraphicsEnvironment.getLocalGraphicsEnvironment(); 
GraphicsDevice gDev=gEnv.getDefaultScreenDevice(); 

//Get screen dimensions 
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); 
rectangle = new Rectangle(dim); 

System.out.println(rectangle); 
robot = new Robot(gDev); 
BufferedImage image = robot.createScreenCapture(rectangle); 


// FileInputStream inputStream = new FileInputStream(MyFile); 
// BufferedImage originalImage = ImageIO.read(inputStream); 
Iterator iter = ImageIO.getImageWritersByFormatName("jpeg"); 
ImageWriter writer = (ImageWriter)iter.next(); 
ImageWriteParam iwp = writer.getDefaultWriteParam(); 
iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); 
float quality = 0.25f; // reduce quality by 50% 
iwp.setCompressionQuality(quality); 
File file = new File("Tester6.png"); 

FileImageOutputStream output = new FileImageOutputStream(file); 
writer.setOutput(output); 

IIOImage image1 = new IIOImage(image, null, null); 

writer.write(null, image1, iwp); 
writer.dispose(); 

回答

2

而不是創建一個文件,這樣做:

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
ImageOutputStream ios = ImageIO.createImageOutputStream(baos); 
writer.setOutput(ios); 

你可以然後在調用writer.write()後使用baos.toByteArray()來獲取字節。