BitmapFactory.decodeResource之坑

开发的一个某某上妆软件需要的上妆软件,要大量的图像素材,出于某些节省资源的角度考虑,每种颜色的图像只准备一套,我只使用一套颜色的素材,其他情况下使用修改RGBA根据需要修改颜色。修改之后的图片存起来使用以节省下一次转换的时间。

开发中发现生成的素材在使用上误差很大,后来发现是BitmapFactory.decodeResource的坑。该函数默认会根据屏幕大小对图像进行放缩,导致转换后的图像比原始图像尺寸大的比较大,网上查资料未找到解决方法,几乎都说options.inTargetDensity = value.density,后来发现这个设置不起效果,翻看API发现options.inScaled = false;参数管用,特记之。

public static Bitmap getBitmap(Context context, int resId){
    BitmapFactory.Options options = new BitmapFactory.Options();
    TypedValue value=new TypedValue();
    context.getResources().openRawResource(resId, value);
    options.inTargetDensity = value.density;
    options.inScaled = false;
    return BitmapFactory.decodeResource(context.getResources(), resId, options);
}

猜你喜欢

转载自blog.csdn.net/blogercn/article/details/84402229