Я работаю над игрой, в которой есть простые пиксельные спрайты. Так как я планирую сделать это масштабируемым (я имею в виду масштабирование всей игровой графики), я хотел бы реализовать хороший алгоритм масштабирования, подходящий для пиксельной графики, при поиске в Интернете я нашел этот HQX , чтобы я мог масштабируйте все спрайты (не в реальном времени), а затем используйте эти новые версии.
Я нашел реализацию этого алгоритма HQX в коде C, все сводится к простой функции, которая принимает массив uint32_t
исходного изображения и заполняет новый массив uint32_t
, уже выделенный масштабированной версией спрайта.
Подпись просто
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
Так что цель может быть построена как отдельная библиотека или библиотека.
Что я хотел бы сделать, так это вызвать этот метод из Java через JNI. Какие задачи я должен выполнить, чтобы сделать это? Кроме того, я хотел бы знать, если производительность будет проблемой или нет, я так не думаю, поскольку, даже если вызов JNI стоит дорого, для каждого спрайта выполняется только вызов (но, возможно, для этого требуется много памяти) копироваться туда-сюда из JVM и собственного кода).
Я знаю оба языка (Java и C), поэтому мне просто нужно знать шаги, связанные с выполнением этой задачи, при условии, что это достаточно просто, в противном случае я просто возьму ссылку на JNI и изучу ее ..
Заранее спасибо