gpt4 book ai didi

java - OpenGL - 尝试将字节数组转换为 BufferedImage 时图像 == null

转载 作者:行者123 更新时间:2023-12-02 06:00:05 27 4
gpt4 key购买 nike

我正在尝试使用 glReadPixels() 获取屏幕,然后将其转换为图像。我收到一条错误消息,指出 image == null。

ByteBuffer _frame = ByteBuffer.allocate( 4 * Main.gui.glCanvas.getWidth() * Main.gui.glCanvas.getHeight() );
System.out.println( "Num Pixels " + Main.width * Main.height );
gl.glReadPixels(
0,
0,
Main.gui.glCanvas.getWidth(),
Main.gui.glCanvas.getHeight(),
GL3.GL_RGBA,
GL3.GL_UNSIGNED_BYTE,
_frame
);

try {
BufferedImage bi = ImageIO.read( new ByteArrayInputStream( _frame.array() ) );
ImageIO.write( bi, "png", new File( "Slices/slicu.png" ) );
} catch ( Exception e ) {
System.out.println( e.getMessage() + " @ Filler.draw()" );
e.printStackTrace();
}

最佳答案

而是使用com.jogamp.common.nio.Buffers.newDirectByteBuffer()而不是 ByteBuffer.allocate()。如果您在这里使用非直接 NIO 缓冲区,JOGL 将必须在后台创建一个直接 NIO 缓冲区,并且无论如何您都无法确定 NIO 缓冲区是否由数组支持,它可以为 null。然后,创建一个数组并将缓冲区的内容复制到其中。

您可以使用com.jogamp.opengl.util.awt.Screenshot , com.jogamp.opengl.util.GLReadBufferUtilcom.jogamp.opengl.util.awt.AWTGLReadBufferUtil相反,Github 上的 jogl-demos 中有一些示例。

我建议您询问有关 JOGL 的问题,而不是在 our official forum 上提问。 .

关于java - OpenGL - 尝试将字节数组转换为 BufferedImage 时图像 == null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22750636/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com