임베디드 카메라 (datasheet here)에서 80 x 60 해상도의 16 비트 컬러 이미지를 얻으려고합니다. 카메라에서 9600 (80 * 60 * 16/8) 바이트를 성공적으로 가져올 수 있지만 이미지를 표시하는 데 문제가 있습니다.안드로이드 16 비트 컬러 이미지를 비트 맵으로
bm = Bitmap.createBitmap(80, 60, Bitmap.Config.RGB_565);
bm.copyPixelsFromBuffer(ByteBuffer.wrap(jpegBytes));
jpegBytes 이미지의 바이트의 배열이며 9600 바이트 길이 : 나는 비트 맵으로 바이트 배열을 변환하려면 다음 코드를 사용하고 있습니다. 다음과 같이
지금, 나는 점점 오전 이미지 : 시간의
99 %. 그러나, 나는 다음과 같이 손상되지 않은 이미지를 얻을 수 있어요 없습니다 :
를 매우 드물게. 왜 이런 일이 일어나고 있는지에 대한 제안은 누구에게 있습니까? 정말 고마워!
는UPDATE : 모든 픽셀이 올바른 자리에 있지만 자신의 RGB 값이 혼합 가지고있는 것처럼
보인다. 예를 들어, 두 사진 사이의 흰색 부분은 RGB의 순서가 흰색을 얻는 데 중요하지 않기 때문에 동일합니다. 그러나, 색상이 빨간색 의자가 손상된 이미지에서 파란색으로 게재하고 파란색 배낭 비트 맵 설정으로 사용 Config.ARGB_8888
손상된 이미지
이미지 구조가 정확하지만 색상이 꺼져있는 것 같습니다. 이미지가 항상 RGB_565 형식으로되어 있다고 확신합니까? 또한, 이미지 데이터가 raw 픽셀인지 (jpeg 인코딩이 아닌) 확신합니까? –
카메라의 데이터 시트에 따르면 이미지는 RGB_565 형식으로 전송되어야합니다. 카메라에서 4 비트 및 8 비트 회색 음영 이미지를 가져와 ARGB_8888을 사용하여 표시 할 수 있었지만 ARGB_8888을 사용하여 16 비트 이미지를 표시하면 응용 프로그램이 충돌합니다. 이는 ARGB_8888에 필요한 픽셀 당 4 바이트가 아니라 16 비트 이미지에 픽셀 당 2 바이트가 있기 때문입니다. –
바이트 순서 문제 일 수 있습니다. bm.copyPixelsFromBuffer (ByteBuffer.wrap (jpegBytes) .order (ByteOrder.LITTLE_ENDIAN));)를 사용하면 어떻게됩니까? –