ビットマップ操作は Android 開発における一般的なタスクであり、多くの場合、データの保存または送信のためにビットマップをバイト配列に変換することが含まれます。ただし、一部の開発者はこの変換を実行しようとすると問題が発生し、次のような疑問が生じます:
Q: copyPixelsToBuffer を使用してビットマップを変換した後、コピーされたバイト配列がゼロで埋められるのはなぜですか?
提供されたコード スニペットは、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();
このコード スニペットは次の手順に従います。
ビットマップ データは、BitmapFactory クラスを使用してバイト配列から取得することもできます。
BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
以上がcopyPixelsToBuffer を使用してビットマップを変換した後、バイト配列にゼロが含まれるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。