画布绘制位图?

Posted

技术标签:

【中文标题】画布绘制位图?【英文标题】:Canvas draw bitmap? 【发布时间】:2018-01-06 08:07:27 【问题描述】:

我知道要在画布中绘制位图,我们需要为全屏图像调用 canvas.drawBitmap(filterBitmap, 0f, 0f, paint)。 但是我不明白为什么我的代码不起作用并且我的 ImageView 是空的。

class MainActivity : AppCompatActivity() 

override fun onCreate(savedInstanceState: Bundle?) 
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val bitmap = BitmapFactory.decodeResource(resources, R.drawable.grass)
    val filterBitmap = Bitmap.createBitmap(bitmap.width, bitmap.height, bitmap.config)

    val paint = Paint().apply 
        color = Color.RED
        style = Paint.Style.FILL
    
    val canvas = Canvas(filterBitmap)
    canvas.drawBitmap(filterBitmap, 0f, 0f, paint)
    filter_image.setImageBitmap(filterBitmap)

可绘制资源有宽度和高度。

【问题讨论】:

【参考方案1】:

解决方案是用位图大小绘制矩形并设置一些颜色。

class MainActivity : AppCompatActivity() 

override fun onCreate(savedInstanceState: Bundle?) 
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val bitmap = BitmapFactory.decodeResource(resources, R.drawable.grass)
    val filterBitmap = Bitmap.createBitmap(bitmap.width, bitmap.height, bitmap.config)

    button.setOnClickListener 
        val paint = Paint().apply 
            color = Color.RED
        
        val canvas = Canvas(filterBitmap)
        canvas.drawRect(Rect(/*bitmap size**/), Paint())
        filter_image.setImageBitmap(filterBitmap)
    

在这种情况下

val filterBitmap = Bitmap.createBitmap(bitmap.width, bitmap.height, bitmap.config)

我们有类似透明位图的东西

或使用

filterBitmap.eraseColor(Color.RED)

【讨论】:

以上是关于画布绘制位图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在画布上绘制并转换为位图?

Android 清除画布上绘制的位图

“画布:Android Studio中试图绘制太大的位图”问题

如何从 ARGB_8888 位图绘制位图

Android,画布:如何清除(删除)画布(=位图),生活在surfaceView中?

无法使用 invalidate() 重绘我的画布位图;