5

哪种方法更有效地从资源中的 Drawable 创建位图?

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)
4

3 回答 3

1

您可以在http://source.android.com上查看位图工厂的源代码, 特别是 decodeResource 的代码。

我认为使用 BitmapFactory 是首选,但在任何一种情况下,如果您正在解码多个位图,那么您应该调用一次 getResources() 并存储结果以用作函数的资源参数。

于 2013-02-12T20:20:28.727 回答
0

两者都应该具有相似的解码性能。事实上,Drawable 的初始创建会调用Drawable.createFromResourceStream()which 调用BitmapFactory.decodeResourceStream().

但是,Resources.getDrawable()使用Context.getDrawable()Drawable缓存,因此如果您使用此 API 多次加载同一个 Bitmap,如果 Drawable 在缓存中,则可以跳过解码,性能会更好。

于 2017-08-08T20:25:24.960 回答
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();

该解决方案被广泛使用并且性能更好,因为它只返回此可绘制对象用于渲染的位图。

于 2017-08-08T19:53:39.263 回答