Java 비트맵을 바이트 배열로 변환할 수 없습니다
코드 조각은 추가 처리를 위해 Java 비트맵을 바이트 배열로 변환하려고 합니다. 그러나 비트맵 픽셀을 버퍼에 복사하려고 하면 예기치 않은 오류가 발생합니다. 복사된 데이터는 일관되게 모두 0을 반환합니다. 이 문제는 비트맵이 카메라에서 불변으로 반환됨에도 불구하고 발생합니다.
기본 문제를 이해하려면 다음을 고려하십시오.
bmp.copyPixelsToBuffer(b); byte[] bytes = new byte[size]; try { b.get(bytes, 0, bytes.length); } catch (BufferUnderflowException e) { // always happens }
copyPixelsToBuffer 메서드는 비트맵의 픽셀 데이터를 제공된 버퍼 그러나 버퍼 크기가 올바르지 않아 버퍼 언더플로 예외가 발생합니다. 이 문제를 해결하려면 size:
byte[] bytes = new byte[b.limit()];
대신 b.limit()에서 반환된 버퍼 크기를 사용하세요. 또한 버퍼 언더플로 예외를 처리하기 위한 조건부 논리가 필요하지 않습니다. 버퍼 크기가 항상 작기 때문에 조건에 관계없이 예외가 발생합니다.
대체 접근 방식
문제가 있는 copyPixelsToBuffer 메서드 대신 대체 접근 방식을 사용하여 변환하는 것을 고려해 보세요. 비트맵을 바이트 배열로:
Bitmap bmp = intent.getExtras().get("data"); ByteArrayOutputStream stream = new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] byteArray = stream.toByteArray(); bmp.recycle();
이 접근 방식에서는 비트맵이 PNG 형식의 바이트 배열로 압축됩니다. 이 방법은 비트맵의 유효한 바이트 배열 표현을 보장합니다.
위 내용은 내 Java 코드가 비트맵을 바이트 배열로 변환하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!