안녕하세요 푸민입니다.
JNI 에서는 기본 변수 타입은 크게 바뀌는 것이 없이 사용할수 있습니다. 하지만 배열을 사용하려면 꽤 많은 변경이 되어야 합니다.
1. 반환 타입 및 파라미터 타입을 설장한다.
jintArray Java_com_example_renderscripttest_MainActivity_colorGrayArray(JNIEnv* env, jobject thiz, jintArray pixels){
...
}
위와 같이 jintArray 라는 타입의 Array 를 반환타입과 파라미터 타입으로 설정합니다.
2. 작업후 반환할 변수를 생성한다.
int r, g, b, graypixel, n, i;
jintArray gray;
jint pixel;
n = env->GetArrayLength(pixels);
gray = env->NewIntArray(n);
위를 보면 int 타입이 있고 jint 타입이 있습니다. int 타입은 해당 C파일 내부에서만 사용하기 때문에 굳이 jint 타입으로 정의할 필요가 없습니다. 그리고 gray 라는 변수를 반환하려고 하기에 입력받은 jintArray 과 같은 크기로 생성해줍니다.
3. 흑백 이미지 작업
for(i = 0 ; i < n ; i++){
env->GetIntArrayRegion(pixels, i, 1, &pixel); //pixel에 pixels[i]값을 대입
r = (pixel >> 16) & 0xFF; //int pixel의 r 부분 추출
g = (pixel >> 8) & 0xFF ;//int pixel의 g 부분 추출
b = pixel & 0xFF; //int pixel의 b 부분 추출
r = g = b = (int)(r * 0.229 + g * 0.587 + b * 0.114); //회색으로 변환
graypixel = (0xFF000000 | (r << 16) | (g << 8) | b); //하나의 int 타입으로 합쳐줌
env->SetIntArrayRegion(gray, i, 1, &graypixel); // gray[i]에 값을 대입
}
픽셀 크기 만큼 반복문을 통해서 각 픽셀들의 r, g, b 값을 추출하여 gray 계산식을 사용해서 바꿔줍니다.
4. 이미지 데이터(jintArray)를 반환한다.
return gray;
소스 입니다.
int r, g, b, graypixel, n, i;
jintArray gray;
jint pixel;
//jniArray 라는 반환값을 가진다.
// 파라미터로 jintArray 라는 변수를 받는다.
jintArray Java_com_example_renderscripttest_MainActivity_colorGrayArray(JNIEnv* env, jobject thiz, jintArray pixels){
n = env->GetArrayLength(pixels);// 사이즈를 구하는 함수이다. C++ 문법에 맞게 작성되어있다.
gray = env->NewIntArray(n);//jintArray 타입 생성
for(i = 0 ; i < n ; i++){
env->GetIntArrayRegion(pixels, i, 1, &pixel);//pixel에 pixels[i]값을 대입
r = (pixel >> 16) & 0xFF;//int pixel의 r 부분 추출
g = (pixel >> 8) & 0xFF;//int pixel의 g 부분 추출
b = pixel & 0xFF;//int pixel의 b 부분 추출
r = g = b = (int)(r * 0.229 + g * 0.587 + b * 0.114);//회색으로 변환
graypixel = (0xFF000000 | (r << 16) | (g << 8) | b);//하나의 int 타입으로 합쳐줌
env->SetIntArrayRegion(gray, i, 1, &graypixel);// gray[i]에 값을 대입
}
return gray;//반환
}
'Development > Android' 카테고리의 다른 글
[안드로이드] 렌더스크립트 로그 찍어보기! RenderScript! (0) | 2015.10.31 |
---|---|
[안드로이드] 렌더스크립트?? RenderScript - 소개 (0) | 2015.10.30 |
[안드로이드][JNI] 로그찍어보기 (0) | 2015.10.28 |
[안드로이드][JNI] JNI 개발 순서 절차! (0) | 2015.10.27 |
[안드로이드][JNI] C언어를 활용하는 JNI! 환경구성 (0) | 2015.10.26 |
댓글