>  기사  >  Java  >  비트맵에서 copyPixelsToBuffer()를 호출한 후 버퍼의 모든 바이트가 0인 이유는 무엇입니까?

비트맵에서 copyPixelsToBuffer()를 호출한 후 버퍼의 모든 바이트가 0인 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-05 10:18:02356검색

Why are all bytes in my buffer 0 after calling copyPixelsToBuffer() on a Bitmap?

Java: 비트맵을 바이트 배열로 변환

제공된 코드를 사용하여 비트맵 객체를 바이트 배열로 변환하려고 할 때 사용자는 다음과 같은 문제가 발생할 수 있습니다. copyPixelsToBuffer()를 호출한 후 버퍼의 모든 바이트가 0으로 유지되는 문제. 카메라에서 반환된 비트맵의 불변성에도 불구하고 복사 프로세스에 영향을 주어서는 안 됩니다.

잠재적인 근본 원인:

코드 조각은 ByteBuffer 클래스를 사용하여 메모리를 할당하고 비트맵의 픽셀을 버퍼에 넣습니다. 그러나 오프셋을 올바르게 설정하지 않고 기본 버퍼에 직접 액세스합니다. 이로 인해 get() 메서드가 0 값만 반환할 수 있습니다.

해결책:

이 문제를 해결하려면 다음 접근 방식을 사용하는 것이 좋습니다.

<code class="java">Bitmap bmp = intent.getExtras().get("data");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
bmp.recycle();</code>

이 문제에서는 개선된 코드:

  • 데이터를 캡처하는 데 사용할 수 있는 ByteArrayOutputStream 스트림이 생성됩니다. 바이트 배열로 변환됩니다.
  • compress() 메소드는 Bitmap 객체에서 호출되어 해당 픽셀을 PNG 형식으로 변환하고 이를 ByteArrayOutputStream에 씁니다.
  • 마지막으로 toByteArray() 메소드는 ByteArrayOutputStream의 내용을 바이트 배열로 변환합니다.

이를 사용하여 이 접근 방식을 사용하면 버퍼 언더플로 문제가 발생하지 않고 Bitmap 객체를 바이트 배열로 효과적으로 변환할 수 있습니다.

위 내용은 비트맵에서 copyPixelsToBuffer()를 호출한 후 버퍼의 모든 바이트가 0인 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.