Base64にエンコードしてサーバーに送信したいビットマップがありますが、pngまたはjpegで画像を圧縮したくありません。
さて、以前私がやっていたことはそうでした。
ByteArrayOutputStream byteArrayBitmapStream = new ByteArrayOutputStream();
bitmapPicture.compress(Bitmap.CompressFormat.PNG, COMPRESSION_QUALITY, byteArrayBitmapStream);
byte[] b = byteArrayBitmapStream.toByteArray();
//then simple encoding to base64 and off to server
encodedImage = Base64.encodeToString(b, Base64.NO_WRAP);
今、私は圧縮したり、エンコードしたりサーバーに送信したりできるビットマップからの単純で単純なbyte []形式を使いたくありません。
ポインタはありますか?
copyPixelsToBuffer()
を使用してピクセルデータをBuffer
に移動するか、または getPixels()
を使用できます。次に、ビットシフトを使用して整数をバイトに変換します。
copyPixelsToBuffer()
はおそらく使用したいものです。そのため、使用方法の例を次に示します。
//b is the Bitmap
//calculate how many bytes our image consists of.
int bytes = b.getByteCount();
//or we can calculate bytes this way. Use a different value than 4 if you don't use 32bit images.
//int bytes = b.getWidth()*b.getHeight()*4;
ByteBuffer buffer = ByteBuffer.allocate(bytes); //Create a new buffer
b.copyPixelsToBuffer(buffer); //Move the byte data to the buffer
byte[] array = buffer.array(); //Get the underlying array containing the data.
@jave answerの次の行の代わりに:
int bytes = b.getByteCount();
次の行と関数を使用します。
int bytes = byteSizeOf(b);
protected int byteSizeOf(Bitmap data) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR1) {
return data.getRowBytes() * data.getHeight();
} else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KitKat) {
return data.getByteCount();
} else {
return data.getAllocationByteCount();
}
BitmapCompat.getAllocationByteCount(bitmap);
byteBufferの必要なサイズを見つけるのに役立ちます