gpt4 book ai didi

java - 在 Java 中使用 C 代码的快速步骤

转载 作者:太空宇宙 更新时间:2023-11-04 00:27:21 29 4
gpt4 key购买 nike

我正在开发一款具有简单像素艺术 Sprite 的游戏。由于我计划对其进行缩放(我的意思是整个游戏图形缩放),我想实现一个适合像素艺术的良好缩放算法,在互联网上搜索我发现了这个 HQX这样我就可以缩放所有 Sprite (不是实时的),然后使用这些新版本。

我在 C 代码中找到了这个 HQX 算法的实现,一切都简化为一个简单的函数,它获取源图像的​​ uint32_t 数组并填充一个新的 uint32_t 数组已经分配了 Sprite 的缩放版本。

签名只是

HQX_API void HQX_CALLCONV hq2x_32( uint32_t * sp, uint32_t * dp, int Xres, int Yres )

两个符号声明为

#if defined( __GNUC__ )
#ifdef __MINGW32__
#define HQX_CALLCONV __stdcall
#else
#define HQX_CALLCONV
#endif
#else
#define HQX_CALLCONV
#endif

#if defined(_WIN32)
#ifdef DLL_EXPORT
#define HQX_API __declspec(dllexport)
#else
#define HQX_API __declspec(dllimport)
#endif
#else
#define HQX_API
#endif

以便目标可以构建为独立的或库。

我想做的是通过 JNI 从 Java 调用此方法。我应该完成哪些任务才能做到这一点?此外,我想知道性能是否会成为问题,我不这么认为,因为如果 JNI 调用很昂贵,则只需为每个 Sprite 调用一次(但它可能需要大量内存来从 JVM 和 native 代码来回复制)。

我知道这两种语言(Java 和 C),所以我只需要知道执行此任务所涉及的步骤,假设它足够简单,否则我将直接使用 JNI 引用并研究它..

提前致谢

最佳答案

如果您不经常缩放 Sprite ,您可能会发现使用 JNA 会更容易。 (Java Native Access) 优于 JNI。它更友好,但更慢。使用 JNA,您可能不需要编写任何额外的 native 代码。

如果您确实使用 JNI,通常您会在 Java 中创建“本地方法”(带有“本地”限定符的空方法),使用 javah 生成 C 头文件,并编写相应的 C 源文件来实现“本地方法”。在运行时,您需要使用 System.loadLibrary() 加载您的本地库。(如果您使用的是 Mac,动态库扩展名必须是 .jnilib。)

JNI 调用可以用纳秒来衡量。可能会复制大型数组,从而增加时间。今年早些时候,我对 100,000 个元素的整数数组进行了大约 80 微秒的测量。我认为使用 java.io 类型的 DirectByteBuffer 可以避免这种情况。

关于java - 在 Java 中使用 C 代码的快速步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4465631/

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