猿来是9527 2014-02-13 02:49 采纳率: 0%
浏览 3462

安卓 Drawable 转 bitmap

本人将后缀为png的图片放在res->drawable-hdpi下。现在想将其转换为bitmap然后作其他处理,看到网上很多的文章。
方法1------------------------------------
Resources res=getResources();
Bitmap bmp=BitmapFactory.decodeResource(res, R.drawable.a);
Log.i(TAG, "2222"+bmp);

方法2------------------------------------
Drawable drawable = getResources().getDrawable(R.drawable.a);
Bitmap bitmap = MainActivity.drawableToBitmap(drawable);
Log.i(TAG, "1111"+drawableToBitmap(drawable));

public static Bitmap drawableToBitmap(Drawable drawable)
{
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
Bitmap bitmap = Bitmap.createBitmap(width, height, drawable.getOpacity() != PixelFormat.OPAQUE? Bitmap.Config.ARGB_8888: Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0,0,width,height);
drawable.draw(canvas);
return bitmap;

}

打印出的log信息为
2222android.graphics.Bitmap@41069968
1111android.graphics.Bitmap@41069d98

---------------------------------
我很想知道这两种方法有什么区别,查看api后,我的猜测是,第2种方法可以将各种格式的图片转换为bitmap,第1种方法只能将某些格式的图片转换为bitmap。

很菜,很迷惑。求指导

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-01 18:28
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    两种方法都可以将资源图片转为Bitmap,但是有以下几点区别:

    1. 第一种方法只支持特定格式的图片:R.drawable.a表示Android系统提供的预定义的资源ID,用于加载和显示图片。如果图片不是从这个资源中获取的,那么这种方法无法使用。

    2. 第二种方法可以加载任何资源中的图片,并且对所有格式的支持都很好,包括但不限于PNG、JPEG、GIF等常见格式。因此,如果你想要加载和处理多种不同类型的图片,第二种方法会更加方便。

    3. 第二种方法使用了Drawable对象,而第一种方法直接创建了一个新的Bitmap对象。这可能会影响性能,因为Drawable对象通常比原始资源更小,但功能上与原始资源相同。

    所以,在大多数情况下,第二种方法是更好的选择,因为它能提供更多的灵活性。

    评论

报告相同问题?