【发布时间】:2020-07-02 07:01:54
【问题描述】:
我正在开发一个 OpenGL 项目,该项目需要我通过 JNI 库实现 JVM,以使用 JavaGraphics2D 渲染到 c++ 中的 OpenGL 映射缓冲区。我知道我可以使用指向映射缓冲区的void* 指针创建一个java.nio.ByteBuffer 对象:
jobject NewDirectByteBuffer(JNIEnv* env, void* address, jlong capacity);
如果我通过将 ByteBuffer 转换为 byte[] 数组,将该数组包裹在 ByteArrayInputStream 周围并使用 ImageIO.read() 来传递它,那么最终 BufferedImage 仍将使用与void* 存储指针或 ImageIO 方法是否为 BufferedImage 存储分配新内存?即如果我使用 Java2DGraphics 绘制到 BufferedImage 上,是否会导致原始 void* 内存也被更改?
如果不是这样,我将不得不将 BufferedImage 数据复制到 ByteBuffer 中
【问题讨论】:
标签: java c++ java-native-interface bufferedimage bytebuffer