从res创建Bitable的有效方法(BitmapFactory vs Type Casting)

时间:2013-02-12 20:13:16

标签: android bitmap android-resources bitmapfactory android-drawable

哪种方法更有效地从资源中创建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)

3 个答案:

答案 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是在缓存和性能会更好。