经过查阅资料以及自己尝试,终于实现了在Android NDK 画图和打开并显示图片。现将自己的测试代码以及使用过程中的心得写下,希望与大家交流一下。
首先,测试程序的运行结果如下图所示:
调用DrawJpg打开模拟器中的一张Jpg格式的图片并显示
调用DrawFlag函数画出来的旗帜
下面是具体的代码实现。其中,传递到JNI端的是Canvas。运行的模拟器是Android4.0。Android源码的下载是使用git工具,采用如下命令下载的。
git clone https://android.googlesource.com/platform/external/skia -b android-4.0.1_r1
git clone https://android.googlesource.com/platform/frameworks/base -b android-4.0.1_r1
git clone https://android.googlesource.com/platform/system/core -b android-4.0.1_r1
libskia.so等均是通过DDMS从Android4.0的模拟机上Pull下来的。注意,Android源码和使用的so库的版本必须是一致的。否则,会出现编译出错,只能画线不能画字等错误。
显示的图片是使用DDMS push到Android模拟机上的,放在sdcard目录下。
//com_Test1.h
//JNI 端的头文件,两个函数
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_Test1 */
#ifndef _Included_com_example_test_MainActivity
#define _Included_com_example_test_MainActivity
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT jint JNICALL Java_com_example_test1_NativeMethods_DrawFlag
(JNIEnv *, jobject, jobject);
JNIEXPORT jint JNICALL Java_com_example_test1_NativeMethods_DrawJpg
(JNIEnv *, jobject, jobject);
#ifdef __cplusplus
}
#endif
#endif
//Test1.cpp
//JNI端的实现
#include <stdio.h>
#include <stdlib.h>
#include "com_Test1.h"
#include <jni.h>
#inclu