我在直接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>