繁体   English   中英

改变图像质量

[英]Changing image quality

我正在尝试用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();

代替创建文件,执行以下操作:

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

然后,可以在调用writer.write()之后使用baos.toByteArray()获取字节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM