copyPixelsToBuffer を使用してビットマップを変換した後、バイト配列にゼロが含まれるのはなぜですか?

Patricia Arquette
リリース: 2024-11-06 15:45:02
オリジナル
227 人が閲覧しました

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

バイト配列変換によるビットマップ データの保持

ビットマップ操作は Android 開発における一般的なタスクであり、多くの場合、データの保存または送信のためにビットマップをバイト配列に変換することが含まれます。ただし、一部の開発者はこの変換を実行しようとすると問題が発生し、次のような疑問が生じます:

Q: copyPixelsToBuffer を使用してビットマップを変換した後、コピーされたバイト配列がゼロで埋められるのはなぜですか?

提供されたコード スニペットは、copyPixelsToBuffer を使用してビットマップをバイト配列に変換する試みを示していますが、結果のバッファーにはゼロのみが含まれます。この問題の原因を理解するために、コードを分析してみましょう。

  • ビットマップはインテントから取得されます。
  • そのサイズは、ビットマップの高さと行バイトを使用して計算されます。
  • 計算されたサイズで ByteBuffer が割り当てられます。
  • copyPixelsToBuffer が呼び出され、ビットマップ ピクセルがバッファにコピーされます。
  • 同じサイズのバイト配列が作成されます。
  • バッファはバイト配列に取得されます。

さらに詳しく調べると、問題が copyPixelsToBuffer メソッド自体にあることが明らかになります。不変ビットマップを使用する場合、実際のピクセルのコピーは実行されませんが、重複した参照が返されます。したがって、ビットマップに対する後続の変更は、コピーされたバッファには反映されません。

解決策: ビットマップ変換の代替方法

ビットマップをバイト配列に効果的に変換するには、代替方法を使用します。雇用されなければなりません。信頼できるアプローチの 1 つは、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 を使用してビットマップを変換した後、バイト配列にゼロが含まれるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!