使用 ImageIO.read() 生成的图像是否仍然使用传递给它的相同内存?



我正在做一个OpenGL项目,它要求我通过JNI库实现JVM,以使用JavaGraphics2D在c ++中渲染到OpenGL映射缓冲区。我知道我可以使用指向映射缓冲区的void*指针创建一个java.nio.ByteBuffer对象:

jobject NewDirectByteBuffer(JNIEnv* env, void* address, jlong capacity);

如果我通过将其转换为byte[]数组,将该数组包装在ByteArrayInputStream并使用ImageIO.read()来传递此ByteBuffer,最终BufferedImage仍然使用与void*指针相同的内存进行存储,还是 ImageIO 方法是否为 BufferedImage 存储分配新内存? 即如果我使用 Java2DGraphics 绘制到缓冲图像上, 它会导致原始的void*内存也被更改吗?

如果不是这种情况,我将不得不将BufferedImage数据复制到ByteBuffer中

ImageIO.read 处理各种输入源并分配自己的内存,它不会与它返回的 BufferedImage 共享您的原始字节 []。

因此,您需要调用ImageIO.write来取回修改。

最新更新