안녕하십니까? 하나 문의 좀 드릴까 합니다.
다른 몇분이 이 부분을 해보셨을꺼 같은데요.
안드로이드쪽에선 png, jpg만 지원되어.. bmp로 생성할 일이 있는데요.
(안드로이드쪽에선 bmp를 로드는 가능하지만 bmp로 직접 생성은 못하는걸로 알고있습니다.)
해서 안드로이드쪽에선 png나 jpg로 생성 후 그걸 ndk(c)에서 bmp로 변환을 해줘야할거 같은데요.
ndk에서 할수있는 방법이 찾아보기론.. 안드로이드쪽 /system/lib 안에 있는 libjpeg.so 파일로..
jpeg를 bmp로 생성하는 부분이 있는것 같아..(리눅스 libjpeg 부분)
그리고 안드로이드쪽에도 libjpeg.so 파일이 /system/lib 에 있습니다.
그래서 기존 jni 소스에서 해당 libjpeg.so 파일을 참조하도록 해주고 있는데요.
LOCAL_LDLIBS := -lm -llog -ljpeg
같은 liblog.so는 잘 참조해서 컴파일이 됩니다. 한데 libjpeg (-ljpeg)를 참조하면
아래와 같은 에러가 발생하네요.
D:/cygwin/home/moon/android-ndk-r5/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld.exe: cannot find -ljpeg
collect2: ld returned 1 exit status
make: *** [out/apps/sample-jni/armeabi/libsample.so] Error 1
희한한게 liblog.so는 같은 /system/lib 안에 포함되어있는데요.. 같은 위치에.. 왜 libjpeg는 못찾는다고 나올까요.............
혹 안드로이드에서 ndk로 또는 다른걸로도 jpg를 bmp로 변환해보신 분...
또 libjpeg.so를 사용해서 위와 같이 해서 처리하신분들의 고견 좀 부탁드리겠습니다.
이거 꼭 처리해야하는데 죽갔어요.. ㅠㅠ;;;
/system/lib/libjpeg.so 은 실제 타겟 안드로이드 시스템에 탑재되어 "실행" 시에 참고하는 거구요.
NDK 프로그램 "링크" 시에는 NDK 내의 플랫폼별 디렉토리의 라이브러리 파일들을 참고합니다.
예를 들면, NDK r5b 버전인 경우 android-ndk-r5b/platforms/android-3, 4, 5, 8, 9 등/arch-arm/usr/lib 디렉토리의
라이브러리들(liblog.so 등) 과 컴파일한 C 파일들과 링크하여 새로운 .so 파일을 만들어내죠.
그러니까 이 디렉토리에 libm.so, liblog.so 는 있는데libjpeg.so 가 없으니 오류가 날 수 밖에요.
이 문제를 해결하려면 jpeg 패키지 소스를 AOSP 싸이트로부터 다운로드받아서
이 플랫폼별 라이브러리 디렉토리에 설치하던지
아니면 아예 본인이 만드시는 프로젝트 내에 libjpeg.so 를 추가하면 됩니다.
락스큐미님, 매발톱님 감사합니다.
일단 안드로이드쪽 /system/lib 안에 있는 libjpeg.so 파일을 android-ndk-r5b/platforms/android-3, 4, 5, 8, 9 등/arch-arm/usr/lib
안에 복사해넣고 컴파일해주니 돼네요.. 일단은 한가지 넘어가긴했는데..
이제 jpg를 bmp로 만들고 1bit로도 만들어하네요.. ㅠㅠ;;;; 끙..
<meta charset="utf-8">http://www.kandroid.org/board/board.php?board=AndroidLib&command=body&no=2
http://forum.falinux.com/zbxe/?mid=android&sort_index=readed_count&order_type=desc&listStyle=webzine&document_srl=523037
위글에서 얘기하는 *.so라는 라이브러리파일들은 어디서 구할수 있나요
안드로이드에서 최신 NDK를 받아도 보이지 않는데 어느 경로에서 구할수 있는지 알수 있을까요?
</meta>ㅋㅋㅋㅋ 어이쿠야 저랑 같은 고민을 하신분도 계시군요
24 bit 는 RGB가 8bit 8bit 8bit 입니다. 1비트로 바꾸시려면 R.G.B 값을 가져와서 색상을 합쳐야 되죠 24bit -> 1bit로
실제 가질수 있는 값이 0 과 1이니 그냥 아무 8bit 값을 가져와서 값이 있으면 1로 없으면 0으로 하시면 1bit bmp 파일로 변경하실수 있습니다. 라이브러리를 사용한다면 글세요? 정확한 용도와 소속을 알려주시면 샘플을 보내드릴 의사도 있습니다. 저도 업무용으로 개발을 하는거라 그냥 드릴수 없어 아쉽군요. 개인적인 소스라면 그냥 드릴텐데요. 아니면 구글링을 좀 해보세요 32bit -> 24bit 를 보시면 이해가 좀 가실겁니다.




int width = bitmap.getWidth();
int height = bitmap.getHeight();
int[] rgb = new int[width * height];
bitmap.getPixels(rgb, 0, width, 0, 0, width, height);
하면 나오는 정보 rgb 로 bmp 파일을 만들수 있습니다.
하지만 해더는 없음으로 수동으로 작성해서 bmp 해더를 만들어 붙여주면
bmp 이미지를 만들수 있습니다.
라이브러리는 무슨 소리인지 모르겠군요?
에러 로그는 NDK 상에서 컴파일 할때 오류인거 같은데 NDK에도 libjpeg.so가 있나요?
그럼 -L 로 path까지 같이 붙여서 잡아보세요