2013-05-22 2 views
3

나는 각각의 바이트가 하나의 픽셀 그레이 스케일 값인 raw picture-files (grayscale-sensordata)를 가지고있다. 따라서 모든 픽셀은 8 비트 값입니다. 내 원시 코드에서는 원시 (raw) 바이트 (이미지 처리)로 작업 한 후 DirectByteBuffer (Java-NIO)로 Java-VM에 바이트 배열을 전달합니다.안드로이드 비트 맵 32 비트 대신 8 비트 픽셀?

내 Java 코드에서 이미지 데이터를 ImageView에 그립니다. 따라서 이미지 데이터를 저장할 비트 맵을 사용합니다. 다음은 Java 측에서 수행 한 작업입니다.

// getLeftImageData() is the native function that returns the 
// DirectByteBuffer with the imagedata to be drawn. Each Byte 
// is one pixel value. 
IntBuffer leftImageData = getLeftImageData().asIntBuffer(); 
int[] arrayL = new int[leftImageData.remaining()]; 
leftImageData.get(arrayL); 
Bitmap.Config conf = Bitmap.Config.ARGB_8888; 
Bitmap bmpL = Bitmap.createBitmap(1920/4, 1080/4, conf); 
bmpL.setPixels(arrayL, 0, 1920, 0, 0, 1920/4, 1080/4); 
ImageView imageL = (ImageView)findViewById(R.id.imageLeft); 
imageL.setImageBitmap(bmpL); 

여기 내 문제가 있습니다. 모든 것은 지금까지는 잘 작동하지만 : setPixels() 메서드는 각 int 값이 하나의 픽셀 값이어야하는 int 배열을 필요로합니다. 따라서 DirectByteBuffer를 IntBuffer (asIntBuffer() - 메서드)로 봅니다. 하지만 지금은 4 픽셀 (= 4 바이트)이 하나의 정수 픽셀 값으로 합쳐지기 때문에 이것이 실제로 원하는 것은 아닙니다. 무슨 뜻인지 알 겠어? 바이트 배열을 사용하여 비트 맵의 ​​픽셀을 설정할 방법이 없습니다. 정수 배열 만 전달할 수 있습니다. 그래서 내 바이트 배열을 수정해야하고 (물론 원래 크기의 4 배로 늘리십시오) 32 비트 정수 형식으로 내 8 비트 값을 가져야합니다.

바이트 배열을 수정하지 않고도 안드로이드 ImageView에서 이미지 데이터를 어떻게 표시 할 수 있습니까? 어쩌면 비트 맵이나 물건을 사용하지 않고 방법이 있습니다 ..? 나는 안드로이드 btw에 꽤 새로 왔습니다.

+0

'픽셀 당 4 바이트'데이터 변환에 '1 바이트 프리 픽셀'이 필요합니까? 각 바이트의 오른쪽에 3 바이트를 0으로 채울 수 있습니다. –

+0

예, 그렇지만 매우 시간과 메모리 비용이 많이 드는 배열 크기를 수정하거나 늘려야합니다. 배열을 수정하지 않고도 다른 방법을 찾고 있습니다. – mschoenebeck

+1

회색조 이미지에서 Android 호환 비트 맵을 만드는 예 [여기] (http://stackoverflow.com/questions/5626795/how-to-get-a-bitmap-from-a-raw-image/5636912#5636912) . –

답변

0

여기를보세요 : Render a byte[] as Bitmap in Android 그리고 문제에 맞게 수정하십시오.

ARGB_8888은 1 픽셀 당 1 바이트 (알파, 레드, 그린, 블루)의 1 바이트를 의미하며 32 비트는 행복합니다.