-
使用InBitmap就可以让三张图片占用一个内存,前提是后面两个图片占用内存小于第一个
查看全部 -
从解码率方面如何对图片进行优化:RGB_565一个像素占两个字节,ARGB_8888一个像素占4个字节,代码实现:options.inPreferredConfig设置
查看全部 -
优化方式一
查看全部 -
png没有压缩,jpeg压缩,webp是理想选择
查看全部 -
如截图所示
查看全部 -
与手机内存没有关系,超出系统给应用的最大限制就会溢出
查看全部 -
见截图所示
查看全部 -
54564554
查看全部 -
32222222222
查看全部 -
撒旦撒旦撒旦撒旦
查看全部 -
超大图片
1.使用BitmapRegionDecoder.decodeRegion()来实现
public Bitmap decodeRegion(Rect rect, BitmapFactory.Options options);
2.通常的做法是
(1)定义一个View来显示这张图,在onMeasure()中创建一个和View一样大小的Rect,用来作为decodeRegion()的参数
int width = getMeasuredWidth(); int height = getMeasuredHeight();//View宽和高 int imgWidth = mImgWidth; int imgHeight = mImgHeight; //图片宽和高, 通过BitmapFactory.decodeFile(..., options)可以拿到,当然options.inJustDecodeBounds = true //获取rect的左右上下边界, 默认是显示图片的中心区域 mRect.left = imgWidth/2 - width/2; mRect.top = imgHeight/2 - height/2; mRect.right = imgWidth/2 + width/2; mRect.bottom = imgHeight/2 + height/2;
(2)在自定义View的onDraw()方法中将decodeRegion()得到的bitmap进行绘制到View上
(3)这个View还需要实现OnGestureListener接口,实现自己的move()函数,其实主要是改变这个Rect。然后调用invalidate()从decodeRegion(rect, ...)中拿到新的bitmap(可能只是一个小区域),再进行draw(bitmap, ...);
查看全部 -
1. mipmap
Android API17引入的一种提高bitmap渲染速度和质量的技术;如果mipmap目录下有图片,Android默认会调用setHasMipMap()开启。
一般情况下,启动图标会放在mipmap目录下。
2. Android图片匹配规则
假如有个设置是480dpi,查找对应的图片文件的顺序如下,直到找到为止
xxhdpi——>xxxhdpi——>nodpi(不会缩放)——>xhdpi——>hdpi
查看全部 -
图片OOM问题
OOM是指Android系统允许进程运行时所使用的内存,和手机本身系统没有关系。
产生
(1)一个页面一次加载过多图片。虽然每个图片的bitmap占用内存较小,但是如果图片过多也会oom
(2)加载大图片没有进行压缩
(3)类似ListView这种先后使用bitmap,但是先前的没有进行缓存。
2.解决
(1)尺寸压缩:通过增大inSampleSize来压缩
BitmapFactory.Options.inSampleSize
(2)质量压缩:减少图片一个像素所占用的内存大小
RGB_565一个像素点占用2个byte,ARGB_8888占用4个byte
Bitmap.Config.RGB_565
通常的例子如图所示
(3)内存重用:通常使用BitmapFactory.Options.inBitmap
BitmapFactory.Options options = new BitmapFactory.Options(); options.inBitmap = mBitmap; //重用了mBitmap的内存,注意当前decode出来的bitmap内存大小不能超过mBitmap Bitmap bitmap = BitmapFactory.decodeFile(..., options); //bitmap是新decode出来的。
查看全部 -
见截图所示
查看全部 -
如截图所示
查看全部
举报