ホームページ >Java >&#&チュートリアル >ビットマップで copyPixelsToBuffer() を呼び出した後、バッファ内のすべてのバイトが 0 になるのはなぜですか?

ビットマップで copyPixelsToBuffer() を呼び出した後、バッファ内のすべてのバイトが 0 になるのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-05 10:18:02424ブラウズ

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 ストリームが作成され、バイト配列に変換するデータをキャプチャするために使用できます。
  • Bitmap オブジェクトで compress() メソッドが呼び出されます。ピクセルを PNG 形式に変換し、ByteArrayOutputStream に書き込みます。
  • 最後に、toByteArray() メソッドは ByteArrayOutputStream の内容をバイト配列に変換します。

このアプローチを使用すると、バッファ アンダーフローの問題が発生することなく、Bitmap オブジェクトをバイト配列に効果的に変換できます。

以上がビットマップで copyPixelsToBuffer() を呼び出した後、バッファ内のすべてのバイトが 0 になるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。