如何在安卓系统中将位图转换为可绘制对象?

496

如何将位图图像转换为Drawable?


3
你好,我已经得到了你提出问题的答案。请访问此链接以获得正确答案,我也成功实践了它。我希望你也能成功。祝你好运!链接为:http://www.androidsnippets.com/convert-bitmap-to-drawable - Zala Janaksinh
3
贡献是表达感谢的好方式... :) 在给出答案方面的贡献... :) - Farhan
@Farhan k ...... . - Abhi
11个回答

890

尝试这个,它将Bitmap类型的图像转换为Drawable类型。

Drawable d = new BitmapDrawable(getResources(), bitmap);

283

听起来你想使用BitmapDrawable

从文档中可以看到:

BitmapDrawable是一个可平铺、拉伸或对齐的Drawable,它包装了一个位图。你可以通过文件路径、输入流、XML膨胀或从Bitmap对象创建一个BitmapDrawable


24
@Deprecated 已过时,请使用BitmapDrawable(Resources, Bitmap)来确保可绘制对象已正确设置其目标密度。 - Camille Sévigny

163

由于看到许多位图在转换为BitmapDrawable时缩放不正确的问题,通常的转换方式应该是:

Drawable d = new BitmapDrawable(getResources(), bitmap);

如果没有使用Resources reference,即使正确缩放,bitmap也可能无法正常渲染。这里有很多问题可以通过使用此方法而不是仅带有bitmap参数的直接调用来解决。


18
如果你要给一个回答点踩,请至少解释一下原因。这是一个完全有效的答案,并且提供了额外的信息来解决其他答案可能出现的问题。从位图直接创建可绘制对象通常会出现缩放错误,如果没有 getResources() 引用的话。 - Zulaxia
5
这是一份更准确的答案,考虑到@Manoj的回答已经过时。 - Raykud
@Raykud,Manoj的回答和这个回答展示了相同的代码。那么,它是如何被弃用的?如果那个已经被弃用,而这个也被弃用了,那么这个准确吗?(实际上它并没有被弃用) - Sambhav Khandelwal
1
@Sambhav.K 因为 Manoj 最初的回答是 "Drawable d =new BitmapDrawable(bitmap);",但已经被编辑多年。 - Raykud

35

官方Bitmapdrawable文档

这是将位图转换为可绘制对象的示例。

Bitmap bitmap;  
//Convert bitmap to drawable
Drawable drawable = new BitmapDrawable(getResources(), bitmap);
imageView.setImageDrawable(drawable);

抱歉...我不是认真的。 - Abhi
7
你本可以点赞,而不是写一模一样的回答。 - CopsOnRoad

32

我使用了上下文

//Convert bitmap to drawable
Drawable drawable = new BitmapDrawable(context.getResources(), bitmap);

7
重复的答案。 - CopsOnRoad

23

1) 将位图转换为可绘制对象(Drawable):

Drawable mDrawable = new BitmapDrawable(getResources(), bitmap);
// mImageView.setDrawable(mDrawable);

2) 将drawable转换为Bitmap:

Bitmap mIcon = BitmapFactory.decodeResource(context.getResources(),R.drawable.icon_resource);
// mImageView.setImageBitmap(mIcon);

20
如果您有一张位图图像,并想将其用作可绘制对象,例如:
Bitmap contact_pic;    //a picture to show in drawable
drawable = new BitmapDrawable(contact_pic); 

21
现在已经被弃用了,请使用BitmapDrawable(Resources, Bitmap)构造函数。 - schlingel
1
@schlingel,它仍然运行良好,我们中的许多人正在我们的项目中使用它。 - Pir Fahim Shah
2
这对你来说是好的,但当谷歌最终淘汰这个构造函数并且你不得不重写所有内容时,这就没有用了。 - schlingel
@schlingel 是的,但还是有人匆忙使用它,并且能让工作完成。 - Pir Fahim Shah

11

只需要这样做:

private void setImg(ImageView mImageView, Bitmap bitmap) {

    Drawable mDrawable = new BitmapDrawable(getResources(), bitmap);
    mImageView.setDrawable(mDrawable);
}

1
他所询问的问题并没有得到解决。 - IIRed-DeathII

2
这是另一个:
Drawable drawable = RoundedBitmapDrawableFactory.create(context.getResources(), bitmap);

2

对于Kotlin用户:

Kotlin有一个将Bitmap转换为BitmapDrawable的函数:

Bitmap.toDrawable(resources)


该函数可以帮助您快速将位图转换为可绘制对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接