Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过JNIC代码将PNG图像作为BuffereImage加载到Java中_Java_Java Native Interface_Bufferedimage - Fatal编程技术网

通过JNIC代码将PNG图像作为BuffereImage加载到Java中

通过JNIC代码将PNG图像作为BuffereImage加载到Java中,java,java-native-interface,bufferedimage,Java,Java Native Interface,Bufferedimage,我有以下问题。我有C代码,它获取PNG图像作为基本的原始数据,并将其保存在内存中。我希望通过使用JNI将这些原始数据转换为Java中的BuffereImage。是否有人知道或曾经使用过这种方法?如果您以前从未使用过JNI,我建议您查看一下 总之,您需要做的是: 创建一个带有native关键字的Java方法,不带任何实现 使用带有本机方法的类上的命令javah生成头文件(.h)javah附带JDK安装 在C/C++中实现本机Java函数。 搜索类java.awt.image.buffereImag

我有以下问题。我有C代码,它获取PNG图像作为基本的原始数据,并将其保存在内存中。我希望通过使用JNI将这些原始数据转换为Java中的BuffereImage。是否有人知道或曾经使用过这种方法?

如果您以前从未使用过JNI,我建议您查看一下

总之,您需要做的是:

  • 创建一个带有
    native
    关键字的Java方法,不带任何实现
  • 使用带有本机方法的类上的命令
    javah
    生成头文件(.h)
    javah
    附带JDK安装
  • 在C/C++中实现本机Java函数。
  • 搜索类java.awt.image.buffereImage
  • 搜索要使用的构造函数
  • 使用指定的构造函数创建BuffereImage对象
  • 搜索setPixel方法
  • 运行该方法设置图像中的每个像素值。您需要运行它的高度x宽度倍
  • 返回对象
  • 将本机文件编译到共享库中
  • 在Java类中加载共享库
  • 运行Java类,链接共享库

  • 还有其他复制图像原始数据的方法,但我解释的这种方法应该足够了。

    我假设您知道如何使用JNI调用函数的基本知识。这没那么复杂,尽管这可能会让人感到很痛苦

    如果想快速完成,只需将PNG写入临时文件,通过JNI向上传递文件名,并使用ImageIO加载即可

    如果您想变得更复杂,并且不需要文件路径,那么可以在包装通过JNI传入的字节数组的上使用。您可以从C调用,然后使用设置数据


    <>最后,您可以考虑使用HTTP来传输数据,包括一个小Web服务器的Apache,您可以从C代码到java java。< /P> < P>由于java库支持PNG,我将添加一个机制,将所有字节从C复制到Java,并使用IMAIO类作为建议。

    也可以考虑使用JNA让生活更容易()。

    嘿,乍得,谢谢你的评论。这确实是我最后做的事,尽管我在我真的做过之后才知道怎么做:嘿,幸运的是我不使用Windows做任何事情,所以我不能使用JNA。谢谢你的提醒,如果我再切换回windows,我会发现这很有用。谢谢你的回复,我最终用了另一种方式。