如何将 Drawable 转换为 Bitmap?
我想将某个 Drawable
设置为设备的壁纸,但所有壁纸函数仅接受 Bitmap
。我无法使用 WallpaperManager
因为我是 2.1 之前的版本。
另外,我的绘图是从网络下载的,并不驻留在 R.drawable 中。
I would like to set a certain Drawable
as the device's wallpaper, but all wallpaper functions accept Bitmap
s only. I cannot use WallpaperManager
because I'm pre 2.1.
Also, my drawables are downloaded from the web and do not reside in R.drawable
.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(22)
这段代码有帮助。
这是下载图像的版本。
This piece of code helps.
Here a version where the image gets downloaded.
这会将 BitmapDrawable 转换为 Bitmap。
This converts a BitmapDrawable to a Bitmap.
Drawable
可以绘制到Canvas
上,并且Canvas
可以由Bitmap
支持:(已更新以处理
BitmapDrawable
的快速转换并确保创建的Bitmap
具有有效的大小)A
Drawable
can be drawn onto aCanvas
, and aCanvas
can be backed by aBitmap
:(Updated to handle a quick conversion for
BitmapDrawable
s and to ensure that theBitmap
created has a valid size)方法 1 :您可以像这样直接转换为位图
方法 2 :您甚至可以将资源转换为可绘制对象,从中您可以获得像这样的位图
对于 >API > 22
getDrawable
方法移至ResourcesCompat
类,因此您可以执行以下操作METHOD 1 : Either you can directly convert to bitmap like this
METHOD 2 : You can even convert the resource into the drawable and from that you can get bitmap like this
For API > 22
getDrawable
method moved to theResourcesCompat
class so for that you do something like thisandroid-ktx 有
Drawable.toBitmap
方法: https://android.github.io/android-ktx/core-ktx/androidx.graphics.drawable/android.graphics.drawable.-drawable/to -bitmap.html来自 Kotlin
android-ktx has
Drawable.toBitmap
method: https://android.github.io/android-ktx/core-ktx/androidx.graphics.drawable/android.graphics.drawable.-drawable/to-bitmap.htmlFrom Kotlin
1) 可绘制到位图:
2) 位图到可绘制:
1) Drawable to Bitmap :
2) Bitmap to Drawable :
很简单
very simple
最新的 androidx 核心库 (androidx.core:core-ktx:1.2.0) 现在有一个 扩展函数:
Drawable.toBitmap(...)
将 Drawable 转换为 Bitmap。The latest androidx core library (androidx.core:core-ktx:1.2.0) now has an extension function:
Drawable.toBitmap(...)
to convert a Drawable to a Bitmap.因此,在查看(并使用)其他答案后,似乎他们都处理
ColorDrawable
和PaintDrawable
很糟糕。 (尤其是在棒棒糖上)似乎对着色器进行了调整,因此无法正确处理固体颜色块。我现在使用以下代码:
与其他代码不同,如果您在要求将
Drawable
转换为位图之前调用setBounds
,它将在正确的位置绘制位图尺寸!So after looking (and using) of the other answers, seems they all handling
ColorDrawable
andPaintDrawable
badly. (Especially on lollipop) seemed thatShader
s were tweaked so solid blocks of colors were not handled correctly.I am using the following code now:
Unlike the others, if you call
setBounds
on theDrawable
before asking to turn it into a bitmap, it will draw the bitmap at the correct size!也许这会对某人有所帮助...
从 PictureDrawable 到 Bitmap,使用:
...实现如下:
Maybe this will help someone...
From PictureDrawable to Bitmap, use:
... implemented as such:
这是 @Chris.Jenkins 提供的答案的 Kotlin 版本: https://stackoverflow.com/a/27543712/1016462
Here is the nice Kotlin version of the answer provided by @Chris.Jenkins here: https://stackoverflow.com/a/27543712/1016462
这是
来自如何将可绘制位读取为InputStream<的更好分辨率代码< /a>
Here is better resolution
Code from How to read drawable bits as InputStream
这不会每次都有效,例如,如果您的可绘制对象是图层列表可绘制对象,那么它会给出空响应,因此作为替代方案,您需要将可绘制对象绘制到画布中,然后另存为位图,请参考下面的一段代码。
上面的代码将您的可绘制文件保存为下载目录中的drawable.png
This will not work every time for example if your drawable is layer list drawable then it gives a null response, so as an alternative you need to draw your drawable into canvas then save as bitmap, please refer below a cup of code.
above code save you're drawable as drawable.png in the download directory
Android 提供了一个非直接的解决方案:
BitmapDrawable
。要获取 Bitmap ,我们必须向BitmapDrawable
提供资源 idR.drawable.flower_pic
,然后将其转换为Bitmap
>。Android provides a non straight foward solution:
BitmapDrawable
. To get the Bitmap , we'll have to provide the resource idR.drawable.flower_pic
to the aBitmapDrawable
and then cast it to aBitmap
.BitmapFactory.decodeResource()
自动缩放位图,因此您的位图可能会变得模糊。要防止缩放,请执行以下操作:或
BitmapFactory.decodeResource()
automatically scales the bitmap, so your bitmap may turn out fuzzy. To prevent scaling, do this:or
使用此代码。它将帮助您实现您的目标。
Use this code.it will help you for achieving your goal.
在Kotlin中,最简单的方法是:
像这样:
where,只需要一个drawable变量,没有资源,没有上下文,没有id
In Kotlin, the easiest way is:
like this:
where, just need a drawable variable, No resource, No context, No id
ImageWorker 库可以将位图转换为可绘制或 base64,反之亦然。
实现
在项目级别 Gradle 中
在应用程序级别 Gradle 中
您还可以从外部存储和检索位图/绘图/base64 图像。
检查这里。 https://github.com/1AboveAll/ImageWorker/edit/master/README。 MD
ImageWorker Library can convert bitmap to drawable or base64 and vice versa.
Implementation
In Project Level Gradle
In Application Level Gradle
You can also store and retrieve bitmaps/drawables/base64 images from external.
Check here. https://github.com/1AboveAll/ImageWorker/edit/master/README.md
如果您使用 kotlin,请使用下面的代码。 //它可以
用于使用图像路径
if you are using kotlin the use below code. it'll work
// for using image path
我在这个线程上使用了一些答案,但其中一些没有按预期工作(也许它们在旧版本中工作),但我想在几次尝试和错误后使用扩展函数分享我的答案:
这是扩展功能:
I've used a few answers on this thread but some of them didn't work as expected (maybe they had worked in older versions) but I wanted to share mine after a few tries and errors, using an extension function:
This is the extension function: