>  기사  >  Java  >  copyPixelsToBuffer를 사용하여 비트맵을 변환한 후 내 바이트 배열에 0이 포함되는 이유는 무엇입니까?

copyPixelsToBuffer를 사용하여 비트맵을 변환한 후 내 바이트 배열에 0이 포함되는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-06 15:45:02211검색

Why Does My Byte Array Contain Zeros After Converting a Bitmap Using copyPixelsToBuffer?

바이트 배열 변환으로 비트맵 데이터 보존

비트맵 조작은 Android 개발에서 일반적인 작업으로, 종종 데이터 저장 또는 전송을 위해 비트맵을 바이트 배열로 변환하는 작업이 포함됩니다. 그러나 일부 개발자는 이 변환을 수행하려고 할 때 어려움을 겪으며 다음 질문으로 이어집니다.

Q: copyPixelsToBuffer를 사용하여 비트맵을 변환한 후 복사된 바이트 배열이 0으로 채워지는 이유는 무엇입니까?

제공된 코드 조각은 copyPixelsToBuffer를 사용하여 비트맵을 바이트 배열로 변환하려는 시도를 보여 주지만 결과 버퍼에는 0만 포함됩니다. 이 문제의 원인을 이해하기 위해 코드를 분석해 보겠습니다.

  • 비트맵은 인텐트에서 가져옵니다.
  • 비트맵의 크기는 비트맵의 높이와 행 바이트를 사용하여 계산됩니다.
  • 계산된 크기로 ByteBuffer가 할당됩니다.
  • copyPixelsToBuffer가 호출되어 비트맵 픽셀을 버퍼에 복사합니다.
  • 동일한 크기의 바이트 배열이 생성됩니다.
  • 버퍼는 바이트 배열로 검색됩니다.

자세히 조사해 보면 문제가 copyPixelsToBuffer 메서드 자체에 있다는 것이 분명해졌습니다. 불변 비트맵을 사용하는 경우 실제 픽셀 복사를 수행하지 않고 중복 참조를 반환합니다. 따라서 이후의 비트맵 수정 사항은 복사된 버퍼에 반영되지 않습니다.

해결책: 비트맵 변환을 위한 대체 방법

비트맵을 바이트 배열로 효과적으로 변환하려면 대체 방법 고용되어야 합니다. 신뢰할 수 있는 접근 방식 중 하나는 PNG 또는 JPEG와 같은 형식을 사용하여 비트맵을 압축하고 압축된 데이터를 바이트 배열에 저장하는 것입니다. 예는 다음과 같습니다.

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

이 코드 조각은 다음 단계를 따릅니다.

  • ByteArrayOutputStream을 사용하여 비트맵을 PNG 또는 JPEG 형식으로 압축합니다.
  • 데이터를 바이트 배열로 압축합니다.
  • 변환이 완료된 후 원본 비트맵을 해제합니다.

BitmapFactory 클래스를 사용하여 바이트 배열에서 비트맵 데이터를 검색할 수도 있습니다.

BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);

위 내용은 copyPixelsToBuffer를 사용하여 비트맵을 변환한 후 내 바이트 배열에 0이 포함되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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