哪种方法更有效地从资源中创建Drawable的Bitmap?
Bitmap myBitmap = BitmapFactory.decodeResource(context.getResources(),
R.drawable.icon_resource);
Vs的
Drawable myDrawable = getResources().getDrawable(R.drawable.icon_resource);
Bitmap myBitmap = ((BitmapDrawable) myDrawable).getBitmap();
因为上面的API 22方法已弃用,所以请使用以下
Drawable myDrawable = ContextCompat.getDrawable(context, R.drawable.icon_resource)
答案 0 :(得分:1)
您可以在http://source.android.com查看位图工厂的源代码 特别是decodeResource的代码。
我认为使用BitmapFactory是首选,但在任何一种情况下,如果要解码多个位图,则应调用getResources()一次并存储结果以用作函数的资源参数。
答案 1 :(得分:0)
Bitmap myBitmap = BitmapFactory.decodeResource(context.getResources(),
R.drawable.icon_resource);
根据上面的文档,当我们从inputStream
构造位图时,最好使用方法Vs的
Drawable myDrawable = ContextCompat.getDrawable(context, R.drawable.icon_resource)
Bitmap myBitmap = ((BitmapDrawable) myDrawable).getBitmap();
此解决方案被广泛使用并且性能更好,因为它只返回此drawable使用的位图进行渲染。
答案 2 :(得分:0)
两者都应具有相似的解码性能。事实上,Drawable的初始创建将调用Drawable.createFromResourceStream()
,调用BitmapFactory.decodeResourceStream()
。
但是,Resources.getDrawable()
和Context.getDrawable()
使用Drawable 缓存,因此如果您使用此API多次加载相同的位图,则可以跳过解码,如果Drawable是在缓存和性能会更好。