代码之家  ›  专栏  ›  技术社区  ›  ldog

通过JNI C代码将PNG图像作为BufferedImage加载到Java中

  •  2
  • ldog  · 技术社区  · 17 年前

    3 回复  |  直到 17 年前
        1
  •  4
  •   Yochai Timmer    11 年前

    我假设您知道如何使用JNI调用函数的基础知识。这并不复杂,尽管这可能会让人头疼。

    如果你想快速完成它,只需将PNG写入一个临时文件,通过JNI传递文件名,并使用ImageIO加载它。

    ImageIO.read(InputStream) 在一个 ByteArrayInputStream 它封装了通过JNI传入的字节数组。你可以打电话 NewByteArray() SetByteArrayRegion 设置数据。

    最后,您可以考虑使用HTTP传输数据,Apache has a set of components you can use 包括一个小型web服务器,您可以从C代码POST到Java。

        2
  •  1
  •   cd1    17 年前

    如果你以前从未使用过JNI,我建议你看看 JNI Programmer's Guide and Specification .

    1. native 关键字,没有实现。
    2. 使用命令 javah 使用本机方法在类上生成头文件(.h)。 附带JDK安装。
    3. 在C/C++中实现您的原生Java函数。
      1. 搜索java.awt.image类。缓冲图像。
      2. 使用指定的构造函数创建BufferedImage对象。
      3. 搜索setPixel方法。
      4. 运行该方法设置图像中的每个像素值。你需要运行它 高度 X 宽度
      5. 返回对象。
    4. 将本机文件编译到共享库中。
    5. 在Java类中加载共享库。
    6. 运行Java类,指示、链接共享库。

        3
  •  0
  •   Community Mohan Dere    9 年前

    由于Java库支持PNG,我将添加一种机制,将所有字节从C复制到Java,并使用ImageIO类作为 Chad Okere 建议。

    example using JNA to draw a Windows cursor ).