当前位置: 首页 > 知识库问答 >
问题:

将可绘制资源转换为位图

毋修为
2023-03-14

我试图将一个可绘制资源转换为位图,但每个代码段和每个自己的尝试都返回null或空字符串。

我尝试了一些基本的方法,比如Bitmapfactory。decodeResource(在这里,我尝试了活动上下文、应用程序上下文等,以及各种可绘制资源(png、vector、xml),我尝试了转换中的不同代码段,它总是返回null或“”。我还尝试更改可绘制文件夹而不是可绘制文件夹-24我尝试了基本的可绘制文件夹。

 BitmapFactory.decodeResource(applicationContext.resources,
            R.drawable.test) 

 BitmapFactory.decodeResource(this.resources,
            R.drawable.test) 

 BitmapFactory.decodeResource(resources,
            R.mipmap.ic_launcher) 


 fun drawableToBitmap(drawable: Drawable): Bitmap {
    var bitmap: Bitmap? = null

    if (drawable is BitmapDrawable) {
        if (drawable.bitmap != null) {
            return drawable.bitmap
        }
    }

    if (drawable.intrinsicWidth <= 0 || drawable.intrinsicHeight <= 
 0) {
        bitmap =
            Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888) // Single color bitmap will be created of 1x1 pixel
    } else {
        bitmap = Bitmap.createBitmap(drawable.intrinsicWidth, drawable.intrinsicHeight, Bitmap.Config.ARGB_8888)
    }

    val canvas = Canvas(bitmap!!)
    drawable.setBounds(0, 0, canvas.width, canvas.height)
    drawable.draw(canvas)
    return bitmap
}

///////////

fun drawableToBitmap(drawable: Drawable): Bitmap {
    var bitmap: Bitmap? = null

    if (drawable is BitmapDrawable) {
        val bitmapDrawable = drawable as BitmapDrawable
        if (bitmapDrawable.bitmap != null) {
            return bitmapDrawable.bitmap
        }
    }

    bitmap = if (drawable.intrinsicWidth <= 0 || 
 drawable.intrinsicHeight <= 0) {
        Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888)
    } else {
        Bitmap.createBitmap(
            drawable.intrinsicWidth,
            drawable.intrinsicHeight,
            Bitmap.Config.ARGB_8888
        )
    }

    val canvas = Canvas(bitmap!!)
    drawable.setBounds(0, 0, canvas.width, canvas.height)
    drawable.draw(canvas)
    return bitmap
}

共有1个答案

益银龙
2023-03-14

试试这个(上下文是您的活动上下文或其他)

Bitmap myLogo = BitmapFactory.decodeResource(context.getResources(), R.drawable.my_drawable);
 类似资料:
  • 我是否正确理解了这一点: 所有android设备都属于以下4个密度桶之一:ldpi、mdpi、hdpi、xhdpi。 因此,如果为这些密度中的每一个提供了可绘制资源(这些文件夹中的每一个都存在可绘制资源或具有相同名称的可绘制资源),那么就没有必要在/res/drawable或/res/drawable nodpi中提供具有相同名称的可绘制资源。 我的理解正确吗? 那么,为什么在/res/drawa

  • 我有一个连接器,它有两个端口。两个端口有一个共同的根作为。我正试图找到这两个端口的共同根。 我需要一个端口(p1)的一组元素,可以通过方法找到。对于另一个端口(p2),我需要检查集合中是否存在p2的任何元素。虽然我需要这个方法来返回类型的对象,但在这一点上我有点卡住了。我得到以下错误。

  • 我需要动态设置通知图像图标,它的名字动态传递给我的类。为此,我需要设置builder.setSmallIcon(intres_id)。我谷歌了一下,但是人们已经使用了setDrawableImage()的例子,我已经看到了这篇文章,并相应地在我的代码中实现。 当然,这会显示错误,因为setSmallIcon()需要将整数传递给它。con是传递给我的构造函数的上下文。我已经看到如何在android中

  • 我使用的是23.4版的设计支持库。0.我已启用渐变标志: 我正在使用构建工具23.0版。2,但我仍然在KitKat或更低版本上获得。 当我使用或。 是的,我在每一个我使用抽绳的活动中都会用到这个 这是支持库的错误吗?

  • 所以,我创建一个图形Bash PS1生成器使用Javascript。用户可以从调色板(jsColor库)中为他们想要的任何元素选择任何颜色。我得到的值是该颜色的RGB代表。我想将该值转换为0-255之间的数字,以便在Bash中表示。 示例: 输入:#000000 输出:0 输入:#FFFFFF 输出: 255 转换为最接近的8位表示形式的任何其他输入 **我检查了这篇文章,但答案不太起作用(我得到