Java 屏幕截图(使用 Robot 和 BufferedImage.getRGB)

标签 java pixel bufferedimage awtrobot

我昨天发现了 Robot 类,觉得它很酷。今天我想尝试一下,看看有什么可能;所以我决定我想制作一个程序来截取整个屏幕的屏幕截图,并在 JPanel 上逐像素渲染图像。我已经完成了程序(两个类),但它没有工作,我也不知道为什么(我已经查看了代码几次)。这是代码:

(头等舱)

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(); 
        } 
    } 
}

(二等舱)

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 中的 paintComponent() 方法替换为以下内容:

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    setBackground(Color.WHITE);
    g.drawImage(screenCap, 0, 0, getWidth(), getHeight(), null);
}

您也可以去掉 doRender() 方法。

关于Java 屏幕截图(使用 Robot 和 BufferedImage.getRGB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12357109/

相关文章:

java - 远程 jvisualvm session 不支持 CPU 和分析

Java从重定向的 'friendly' url获取下载的文件名

ios - Cocos2D 中的像素艺术游戏 : Changeable Colors

java - 在 JComponent 中的图像顶部绘制图像会删除底部图像的一部分

java - 如何缩放 BufferedImage

java - BufferedImage 图像指针数据作为 C 函数的 JNI 参数

java - 斯卡拉-Java =? (或 Clojure - Java =?)

swing - Switch 语句有问题吗?

binary - 解释 PNG 像素数据

c - opengl 反转帧缓冲区像素