나는 각각의 바이트가 하나의 픽셀 그레이 스케일 값인 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에 꽤 새로 왔습니다.
'픽셀 당 4 바이트'데이터 변환에 '1 바이트 프리 픽셀'이 필요합니까? 각 바이트의 오른쪽에 3 바이트를 0으로 채울 수 있습니다. –
예, 그렇지만 매우 시간과 메모리 비용이 많이 드는 배열 크기를 수정하거나 늘려야합니다. 배열을 수정하지 않고도 다른 방법을 찾고 있습니다. – mschoenebeck
회색조 이미지에서 Android 호환 비트 맵을 만드는 예 [여기] (http://stackoverflow.com/questions/5626795/how-to-get-a-bitmap-from-a-raw-image/5636912#5636912) . –