"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que todos os bytes no meu buffer são 0 depois de chamar copyPixelsToBuffer() em um Bitmap?

Por que todos os bytes no meu buffer são 0 depois de chamar copyPixelsToBuffer() em um Bitmap?

Publicado em 2024-11-25
Navegar:735

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

Java: convertendo bitmap em matriz de bytes

Ao tentar converter um objeto Bitmap em uma matriz de bytes usando o código fornecido, os usuários podem encontrar um problema em que todos os bytes no buffer permanecem em 0 após chamar copyPixelsToBuffer(). Apesar da imutabilidade do Bitmap retornado da câmera, isso não deve afetar o processo de cópia.

Causa raiz potencial:

O snippet de código usa a classe ByteBuffer para alocar memória e copiar o Bitmap pixels no buffer. No entanto, ele acessa diretamente um buffer subjacente sem definir seu deslocamento corretamente. Isso pode fazer com que o método get() retorne apenas valores 0.

Solução:

Para corrigir esse problema, considere usar a seguinte abordagem:

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

Neste código aprimorado:

  • Um fluxo ByteArrayOutputStream é criado, que pode ser usado para capturar dados a serem convertidos em uma matriz de bytes.
  • O método compress() é invocado no objeto Bitmap para converter seus pixels para o formato PNG e gravá-los no ByteArrayOutputStream.
  • Finalmente, o método toByteArray() converte o conteúdo do ByteArrayOutputStream em uma matriz de bytes.

Ao usar essa abordagem, você pode efetivamente converter um objeto Bitmap em uma matriz de bytes sem encontrando o problema de buffer underflow.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3