美文网首页
Android加载大图

Android加载大图

作者: 莲_藕 | 来源:发表于2020-07-28 21:56 被阅读0次

    首先,存储在磁盘上的图片是被压缩过的(以JPG,PNG或类似的格式存储)。 一旦将图片加载到内存中,它就不再被压缩,并占用尽可能多的图片的所有像素所需的内存空间。

    其次,加载大图的步骤:

    1.获取图片的宽和高:BitmapFactory.Options

    BitmapFactory可以为我们提供图片的元数据。我们可以使用这个类来实现第一步。

    BitmapFactory.Options options = new BitmapFactory.Options();

    options.inJustDecodeBounds =true;//不想将图片加载到内存中。获取图片的相关信息(宽度,高度等),并使用这些信息来计算缩放比例。

    BitmapFactory.decodeResource(getResources(), R.mipmap.hqimage, options);

    2.根据图片的宽和高计算缩放比Reducing Image Size (In Memory)

    :现在我们需要计算inSampleSize。其是BitmapFactory.Options类的一个属性,用于设置图片的缩放比。

    如果我们有一张尺寸为1000x1000的图片,并且在解码之前设置inSampleSize的值为2, 那么解码之后,我们将得到一张尺寸为500x500的图片。

    BitmapFactory.Options options = new BitmapFactory.Options();options.inJustDecodeBounds =true;options.inSampleSize = 3; BitmapFactory.decodeResource(getResources(), R.mipmap.hqimage, options);

    注意:inSampleSize 设置为 5 , 最终 会被 取整为 4

    3.根据缩放比将图片加载到内存中。Reducing Image Size (In Disk)

    我们还可以使用Bitmap的compress方法对磁盘上的图片进行压缩。我们来看看在不改变图片质量的情况下图片被压缩后的大小。 100表示与原图保持相同的质量。

    ByteArrayOutputStream bos = new ByteArrayOutputStream();

    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);

    byte[] bitmapdata = bos.toByteArray();

    通过计算得到图片在磁盘上的大小为1.6 MB。

    我们把compress方法中的质量参数改为50,并再次计算图片大小

    bitmap.compress(Bitmap.CompressFormat.JPEG, 50, bos);

    通过计算得到图片在磁盘上的大小为24.4 KB。

    注意:在改变compress方法中的质量参数的时候,压缩格式应该是.JPEG。设置为PNG格式的时候,修改是无效的。

    相关文章

      网友评论

          本文标题:Android加载大图

          本文链接:https://www.haomeiwen.com/subject/djgqrktx.html