【问题标题】:Scaling a Bitmap Efficiency缩放位图效率
【发布时间】:2015-12-31 04:47:21
【问题描述】:

我想知道这两种方式中哪一种在内存或速度方面更有效。

第一路 - BitmapFactory.decodeResource

    Bitmap loadedBitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.big_image);
    Bitmap scaledBitmap = loadedBitmap.createScaledBitmap(loadedBitmap, 1920, 1080, false);

第二种方式 - (BitmapDrawable)getResources().getDrawable()

    Bitmap loadedBitmap = ((BitmapDrawable)getResources().getDrawable(R.drawable.big_image)).getBitmap();
    Bitmap scaledBitmap = loadedBitmap.createScaledBitmap(loadedBitmap, 1920, 1080, false);

【问题讨论】:

  • 您可以实现两者以在每种​​方式上进行比较。我通常使用第二种方式从资源中加载位图。

标签: android bitmap drawable


【解决方案1】:

第一种方式更好。

 Bitmap loadedBitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.big_image);
 Bitmap scaledBitmap = loadedBitmap.createScaledBitmap(loadedBitmap, 1920, 1080, false);

【讨论】:

  • Yes in second cade GetDrawable 首先创建 Drawable 对象,然后在第一种情况下创建位图,直接将 drawabbe 转换为位图
【解决方案2】:

理论上第一种方法要好得多。 原因是,

Bitmap loadedBitmap = ((BitmapDrawable)getResources().getDrawable(R.drawable.big_image)).getBitmap();

当涉及到时,您正在尝试显式转换,

((BitmapDrawable)<drawable object>

这里BitmapDrawable是Drawable的一个子类,那么它是一个Downcasting,它更容易失败并抛出ClassCastException。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 2012-02-25
    相关资源
    最近更新 更多