【问题标题】:Draw pixel art in Jetpack Compose在 Jetpack Compose 中绘制像素艺术
【发布时间】:2021-08-06 21:31:41
【问题描述】:

我需要禁用图像中的过滤才能正确显示像素艺术。我该怎么做?

我曾经像this answer那样做:

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 有这个选项,你能发布一些关于你过去是如何做到这一点的代码,给我们一个起点吗?
  • 你能发布一张图片来展示吗?您在图像中执行什么样的比例?我在 Compose 的源代码中搜索并想要一个测试图像来尝试一些事情
  • @VitorRamos 任何像素艺术图像。例如:tea_leaves.webp。我将它缩放到固定大小,例如 16dp x 16dp,并且不希望它看起来模糊

标签: android kotlin android-jetpack-compose


【解决方案1】:

至少现在是堡垒,你不能。 Jetpack Compose 使用一个打开了反别名标志的共享画图。

我打开了一个问题,询问是否可以设置我们自己的标志: 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
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 2021-04-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 2022-07-08
      相关资源
      最近更新 更多