一张Bitmap占多少内存计算,通过densityDpi
假设 图片 522*686 ,ARGB 888,放在drawable-xxhdpi(480) ,显示的手机屏幕像素getResources().getDisplayMetrics().densityDpi 获得为640
加上精度的计算
if (willScale && decodeMode != SkImageDecoder::kDecodeBounds_Mode) {
scaledWidth = int(scaledWidth * scale + 0.5f);
scaledHeight = int(scaledHeight * scale + 0.5f);
}
scale=getResources().getDisplayMetrics().densityDpi /等级像素密度(480)
scaledWidth = int( 522 * 640 / 480f + 0.5) = int(696.5) = 696
scaledHeight = int( 686 * 640 / 480f + 0.5) = int(915.16666…) = 915
结果:
scaledWidth*scaledHeight*4(ARGB 888占4通道)
dp和px的计算 通过的是density
import android.content.Context;
public class DensityUtil {
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
}
两者关系
参考:
http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=498