Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 写入文件前后字节数组的大小不同为什么_Android_Performance - Fatal编程技术网

Android 写入文件前后字节数组的大小不同为什么

Android 写入文件前后字节数组的大小不同为什么,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):mBitmap大小:4858755
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);