【问题标题】:How to create complex rectangle bitmap with a frame, both with a round angles/corners?如何创建带有圆角/角的框架的复杂矩形位图?
【发布时间】:2021-02-19 08:58:14
【问题描述】:

我为标签创建了一个示例徽章,我遇到了您在图片中看到的问题。在我看来,内部位图已经在背景矩形中切掉了它的角的圆角区域。

这是我的代码:

fun Bitmap.addBorderAndRoundCorners(borderSize: Int, cornerSize: Int): Bitmap {

    val outputBitmap = Bitmap.createBitmap(
        this.width + borderSize,
        this.height + borderSize,
        this.config
    )

    val rect = Rect(0, 0, outputBitmap.width, outputBitmap.height)
    val rectF = RectF(rect)

    val paint = Paint().apply {
        isAntiAlias = true
        isFilterBitmap = true
        isDither = true
        color = Color.WHITE
        style = Paint.Style.FILL
    }

    val canvas = Canvas(outputBitmap)
    canvas.drawRoundRect(rectF, cornerSize.toFloat(), cornerSize.toFloat(), paint)

    // draw source
    paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_IN)
    canvas.drawBitmap(this, borderSize.toFloat() / 2, borderSize.toFloat() / 2, paint)

    return outputBitmap
}

我该如何解决?

【问题讨论】:

  • 我会先做白色背景,然后在上面绘制另一个画布。

标签: android kotlin bitmap


【解决方案1】:

这是我的函数的更新,使用了 C. Hellmann 的提示:

fun Bitmap.addBorderAndRoundCorners(borderSize: Int, cornerSize: Int): Bitmap {

    val outputBitmap = Bitmap.createBitmap(
        this.width + borderSize,
        this.height + borderSize,
        this.config
    )

    val rect = Rect(0, 0, outputBitmap.width, outputBitmap.height)
    val rectF = RectF(rect)

    val paint = Paint().apply {
        isAntiAlias = true
        isFilterBitmap = true
        isDither = true
        color = Color.WHITE
        style = Paint.Style.FILL
    }

    val backgroundCanvas = Canvas(outputBitmap)
    backgroundCanvas.drawRoundRect(rectF, cornerSize.toFloat(), cornerSize.toFloat(), paint)

    val overlayCanvas = Canvas(outputBitmap)
    overlayCanvas.drawBitmap(this, borderSize.toFloat() / 2, borderSize.toFloat() / 2, paint)

    return outputBitmap
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多