绘制BufferedImage时的性能问题

时间:2017-12-13 20:45:13

标签: java performance drawing bufferedimage

在将VolatileImage(从BufferedImage创建)绘制到JPanel时遇到了一些CPU问题。 在我的应用程序中,我正在从网络摄像头读取图像数据。这些图像的分辨率为1920 * 1080像素,从网络摄像头读取的逻辑允许大约30 FPS。这发生在一个自己的线程中。 在从网络摄像头读取的循环中,我得到一个BufferedImage并将其绘制到VolatileImage中。然后我调用JPanel的重绘方法来绘制VolatileImage。 网络摄像头输出平稳而快速。问题是CPU。它的CPU使用率为95%-100%。

我已经尝试过不重新绘制每个网络摄像头帧,但每30毫秒只会重新绘制一次。 CPU使用率是相同的。 如果我不重新绘制JPanel(因此没有显示图像),但只读取相机中的帧并将它们存储在bufferedImage中,则CPU使用率保持较低。因此绘图部分是CPU消耗部分。不是从网络摄像头读取帧。

这是我的JPanel的paintComponent方法(没什么特别的......)

public void paintComponent(Graphics g) {
    g.drawImage(cameraModel.volatileImage, 0, 0, null);
}

这是从网络摄像头请求帧的方法:

public void run() {
    running = true;
    while(running){
        try {
            Thread.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        dartCamPanel.repaint();
        if (camera.read(frame)){
            ByteBuffer bb = frame.createBuffer();
            bb.get(byteBuffer, 0, bb.capacity());
            volatileContext.drawImage(bufferedImage, 0, 0, null);
        }
    }
}

我做错了什么?

0 个答案:

没有答案