> Java > java지도 시간 > 내 Java 코드가 비트맵을 바이트 배열로 변환하지 못하는 이유는 무엇입니까?

내 Java 코드가 비트맵을 바이트 배열로 변환하지 못하는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-11-05 14:53:02
원래의
442명이 탐색했습니다.

Why Does My Java Code Fail to Convert a Bitmap to a Byte Array?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿