2011-01-26 6 views
1

최근에 할당 할 수있는 메모리 양 (대부분의 장치에서 ~ 25Mb)과 달리 NDK 코드가 할당 할 수있는 메모리 양에 하드 제한이 없음을 알았습니다 자바 측에서.비트 맵/캔버스 사용 및 NDK

비트 맵 데이터가 ~ 20Mb의 메모리를 차지하는 메모리에서 여러 개의 큰 비트 맵을 한 번에 유지해야하는 이미지 처리 응용 프로그램 (Photoshop과 같은)을 작성하고 싶습니다. Java에서이 작업을 수행하면 앱에서 여러 기기에서 예외가 발생하는 경향이 있습니다.

내 모든 현재 코드는 내 이미지 조작을 수행하기 위해 Bitmap 및 Canvas 클래스를 사용합니다. 누구나 C쪽에있는 대부분의 메모리를 할당하고 여전히 안드로이드 2.1 이상을 사용하여 드로잉 작업을 수행하기 위해 Bitmap + Canvas를 사용할 수있는 방법을 제안 할 수 있습니까?

예를 들어, 내 이미지가 6 비트 맵 레이어로 구성되어 있고 사용자가 3 번째 레이어에 그림을 그리는 경우 페인트 blob 비트 맵을 3 번째 레이어에 그리고 나서 화면을 업데이트하여 결과를 표시해야합니다. 모든 레이어를 실시간으로 서로 겹쳐서 표시합니다. 필자는 C에서 6 비트 맵을 int 배열로 할당하고 Bitmap 객체에 저장된 편집중인 레이어의 복사본을 사용하여 Canvas로 Java 측에서 페인팅 작업을 수행하는 방법을 고려했습니다. 평평한 무대가 어떻게 작동 할 지 확신하지 못합니다.

+0

나는 결코 시도하지는 않았지만 ndk로 비트 맵 조작을 보여주는 코드 샘플이 sdk에 있지만 이것은 andorid 2.2에 대해서만 avalabe라고 생각합니다. –

답변

3

NDK에서 "비트 맵 - 플라즈마"샘플을 확인하십시오. Java에서 비트 맵을 생성하고 원시 코드의 비트를 조작합니다. 한 가지 가능한 기술은 큰 메모리 블록을 할당하고 이미지를 원시 코드로 유지하고 Java로 만든 비트 맵에 "보기"를 렌더링하는 것입니다. 보기를 렌더링하고 이미지 레이어의 "병합"을 수행하는 방법은 아마도 원시 코드로 수행되어야합니다. 라인을 따라 무언가 :

... 사용자 계층 ...

My_native_render_code (MyDisplayBitmap)를 변경;

invalidate();