【问题标题】:Semi-transparent white bitmap is shown like opaque white半透明白色位图显示为不透明白色
【发布时间】:2020-11-29 14:28:22
【问题描述】:

我正在尝试创建具有半透明背景(不是黑色)的位图。我使用下一个代码:

    val result = drawable.bitmap.copy(Bitmap.Config.ARGB_8888, true)
    for (y in 0 until result.height) for (x in 0 until result.width) {
        val dstColor = Color.argb(100, 255, 255, 255)
        result.setPixel(x, y, dstColor)
    }

但我看到的只是白色不透明的白色。我尝试将 alpha 参数设置为 0,使用不同的颜色(读取,绿色),但它不起作用。可能的原因是什么?

【问题讨论】:

    标签: android kotlin colors bitmap


    【解决方案1】:

    获取位图副本后,执行以下行创建一个 alpha 通道:

    result.setHasAlpha(true)
    

    其他一切都应该按原样工作。

    例如,获取您的代码并进行如下更改:

    // Get the bitmap. What the bitmap is doesn't really matter. Here it is just a jpg.
    val drawable = ResourcesCompat.getDrawable(resources, R.drawable.somebitmap, null) as BitmapDrawable
    val result = drawable.bitmap.copy(Bitmap.Config.ARGB_8888, true)
    result.setHasAlpha(true)
    val dstColor = Color.argb(100, 255, 255, 255)
    for (y in 0 until result.height) for (x in 0 until result.width) {
        result.setPixel(x, y, dstColor)
    }
    
    image.setImageBitmap(result)
    

    如果result.setHasAlpha(true)被注释掉,那么我们会看到下图。这里的图像没有半透明。

    如果我们取消注释result.setHasAlpha(true),那么我们可以看到半透明:

    【讨论】:

      【解决方案2】:

      我测试了下一种方法,只使用图像视图(bitmap_container id)创建布局,它可以工作,但我需要更改背景视图组颜色才能看到它:

      val bitmap = Bitmap.createBitmap(
          100,
          100,
          Bitmap.Config.ARGB_8888
      )
      val color = Color.argb(100, 255, 255, 255)
      Canvas(bitmap).apply { drawColor(color) }
      bitmap_container.setImageBitmap(bitmap)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-25
        • 2018-06-18
        • 2012-07-05
        • 2018-01-17
        • 1970-01-01
        • 1970-01-01
        • 2012-05-03
        • 2015-09-05
        相关资源
        最近更新 更多