어제 Robot 클래스를 발견했으며 매우 멋지다고 생각했습니다. 오늘 나는 그것으로 실험하고 가능한 것을 보길 원했다. 그래서 전체 화면의 스크린 샷을 찍은 프로그램을 만들고 JPanel에서 픽셀 단위로 이미지를 렌더링하기로 결정했습니다. 프로그램을 마쳤습니다 (두 개의 클래스),하지만 작동하지 않습니다 그리고 나는 이유를 찾을 수 없습니다 (코드를 몇 번 보았다). 여기 코드는 다음과 같습니다Java 스크린 샷 (Robot 및 BufferedImage.getRGB 사용)
(FIRST CLASS)
import java.awt.AWTException;
import java.awt.FlowLayout;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
public class One {
public static void main(String[] args) {
BufferedImage screenCap = null;
Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
try {
screenCap = new Robot().createScreenCapture(screenRect);
Two imageRenderer = new Two(screenCap, screenRect);
imageRenderer.doRender();
JFrame frame = new JFrame();
frame.setVisible(true);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new FlowLayout());
frame.add(imageRenderer);
frame.pack();
} catch (AWTException e) {
e.printStackTrace();
}
}
}
(제 2 유형)
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;
public class Two extends JPanel {
private BufferedImage screenCap;
private Rectangle screenRect;
private Color pixelRGB;
//c1 and c2 are the x and y co-ordinates of the selected pixel.
private int c1, c2;
public Two(BufferedImage sC, Rectangle rect) {
screenCap = sC;
screenRect = rect;
setPreferredSize(new Dimension(rect.width, rect.height));
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
setBackground(Color.WHITE);
g.setColor(pixelRGB);
g.drawRect(c1, c2, 1, 1);
}
public void doRender() {
for(int i=0; i<screenRect.width; i++) {
for(int j=0; j<screenRect.height; j++) {
pixelRGB = new Color(screenCap.getRGB(i, j));
c1 = i;
c2 = j;
repaint();
}
}
}
}
나는 아무 소용이 문제를 해결 봤있다.
누구든지 내가 뭘 잘못하고 있다고 말할 수 있습니까?
'Two'는'screenCap'을 표시하고있는'JLabel'의 인스턴스 여야합니다. –