2013-12-09 9 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()을 사용하여 바이트를 가져옵니다.