Android 写入文件前后字节数组的大小不同为什么
日志的输出如下所示: D/大小(23100):mBitmap大小:4858755Android 写入文件前后字节数组的大小不同为什么,android,performance,Android,Performance,日志的输出如下所示: D/大小(23100):mBitmap大小:4858755 D/尺寸(23100):ByteArrayOutputStream1尺寸:8931843 有谁能帮我解释一下为什么会有这种差异。 我需要根据大小压缩图像,但不压缩大小会有所不同。您似乎正在加载图像,然后重新压缩到位图 public void onPictureTaken(byte[] data, Camera camera) { Uri imageFileUri = null; BitmapFa
D/尺寸(23100):ByteArrayOutputStream1尺寸:8931843 有谁能帮我解释一下为什么会有这种差异。
我需要根据大小压缩图像,但不压缩大小会有所不同。您似乎正在加载图像,然后重新压缩到位图
public void onPictureTaken(byte[] data, Camera camera) {
Uri imageFileUri = null;
BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
bmpFactoryOptions.inJustDecodeBounds = true;
Bitmap mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length, bmpFactoryOptions);
Log.d("SIZE", "mBitmap size :" + data.length);
bmpFactoryOptions.inJustDecodeBounds = false;
mBitmap = BitmapFactory.decodeByteArray(data, 0, data.length, bmpFactoryOptions);
imageFileUri = getApplicationContext().getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new ContentValues());
OutputStream imageFileOS = getContentResolver().openOutputStream(imageFileUri);
mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, imageFileOS);
imageFileOS.flush();
imageFileOS.close();
ByteArrayOutputStream stream1 = new ByteArrayOutputStream();
mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream1);
byte[] imageInByte1 = stream1.toByteArray();
long lengthbmp1 = imageInByte1.length;
Log.d("SIZE", "ByteArrayOutputStream1 size :" + lengthbmp1);
然后你想知道为什么图像大小不一样?答案是你已经对它进行了编码。100是压缩比吗?如果加载以80%压缩的位图,然后在任何图像编辑器中将其重新保存为100%,则大小将增大。第一个问题是,为什么在已经有字节的情况下重新编码位图。您观察到的大小差异来自不同的压缩。相机应用程序通常会压缩质量低于100的图像,但您可以使用100重新压缩图像。很明显,您的图像表示将需要更多的空间
如果确实需要重新压缩(例如,如果您以某种方式更改了图像),请尝试降低质量因子以获得更好的压缩效果。根据您的图像,90到100之间的某个值可能工作得很好。我只是想知道从相机捕获的图像数据的大小。后来我将它写入一个outputsteam文件,并再次打印它的大小。但差别是巨大的。你知道为什么吗
mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream1);