在Jetpack Compose中绘制像素艺术

4

我需要禁用图像过滤,以便正确显示像素艺术。我该怎么做?

我曾经像这个答案中那样做过:

val DRAW_FILTER = PaintFlagsDrawFilter(Paint.FILTER_BITMAP_FLAG, 0)

@SuppressLint("RestrictedApi")
class AliasingDrawableWrapper(wrapped: Drawable) : DrawableWrapper(wrapped) {
    override fun draw(canvas: Canvas) {
        val oldDrawFilter = canvas.drawFilter
        canvas.drawFilter = DRAW_FILTER
        super.draw(canvas)
        canvas.drawFilter = oldDrawFilter
    }
}

并且

imageView.setImageDrawable(AliasingDrawableWrapper(drawable)

我甚至不知道我们在ImageView中有这个选项,你能发一些代码来展示你是如何使用它的吗?这样可以给我们一个起点。 - Vitor Ramos
你能发布一张要显示的图片吗?你在图像中执行什么样的比例?我正在搜索Compose的源代码,并想要一个测试图像来尝试一些东西。 - Vitor Ramos
@VitorRamos 任何像素艺术图片都可以。例如:tea_leaves.webp。我将其缩放到16dp x 16dp的固定大小,不希望它看起来模糊。 - ithersta
2个回答

4

目前至少还不能这样做。Jetpack Compose使用一个带有抗锯齿标志的共享Paint。

我提出了一个问题,询问是否可以设置我们自己的标志:https://issuetracker.google.com/issues/172473708

这是在AndroidPaint.kt中声明Compose的方式:

internal fun makeNativePaint() =
    android.graphics.Paint(android.graphics.Paint.ANTI_ALIAS_FLAG)

2
自Compose 1.1.0-alpha01起,Image接受一个可选的FilterQuality参数。对于像素艺术,请使用FilterQuality.None:
Image(
    ...,
    filterQuality = FilterQuality.None
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接