将ByteBuffer渲染为Swing应用程序中的图像

时间:2016-02-06 22:35:06

标签: java swing java-2d

我在直接ByteBuffer中有一帧视频数据。将其渲染为Swing组件中的图像的最佳方法是什么?

“最佳”是指尽可能少的缓冲区副本。

我的天真实现使用JPanel来绘制BufferedImage。此组件在下面的代码片段中由imagePane引用:

private final int[] array = new int[width*height];

private BufferedImage image; // Contained by imagePane

public void render(ByteBuffer byteBuffer) {
    IntBuffer intBuffer = byteBuffer.asIntBuffer();
    intBuffer.get(array);
    image.getWritableRaster().setDataElements(0, 0, width, height, array);
    imagePane.repaint();
}

对于每个视频帧,此实现从IntBuffer获取ByteBuffer,并将整个内容复制到int[] - 然后将其写入BufferedImage光栅和组件重新绘制。

这对于全屏高清视频来说效果还不错,但有没有办法用更少的缓冲区复制来实现这一目标?

JavaFX有一个WritableImage PixelWriter可以直接接受ByteBuffer作为参数,但我正在寻找能够与Swing / Java2D一起使用的东西。< / p>

0 个答案:

没有答案