-
使用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出來的。
查看全部 -
見截圖所示
查看全部 -
如截圖所示
查看全部
舉報