在 Jetpack Compose 中绘制像素艺术
Draw pixel art in Jetpack Compose
我需要禁用图像中的过滤才能正确显示像素艺术。我该怎么做?
我曾经像 那样做:
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)
至少现在不能。 Jetpack Compose 使用在打开反别名标志的情况下创建的共享画图。
我打开了一个问题,询问是否可以设置我们自己的标志:
https://issuetracker.google.com/issues/172473708
这是 AndroidPaint.kt
中的 Compose 声明:
internal fun makeNativePaint() =
android.graphics.Paint(android.graphics.Paint.ANTI_ALIAS_FLAG)
自 Compose 1.1.0-alpha01 Image 采用可选的 FilterQuality 参数。将 FilterQuality.None 用于像素艺术:
Image(
...,
filterQuality = FilterQuality.None
)
我需要禁用图像中的过滤才能正确显示像素艺术。我该怎么做?
我曾经像
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)
至少现在不能。 Jetpack Compose 使用在打开反别名标志的情况下创建的共享画图。
我打开了一个问题,询问是否可以设置我们自己的标志: https://issuetracker.google.com/issues/172473708
这是 AndroidPaint.kt
中的 Compose 声明:
internal fun makeNativePaint() =
android.graphics.Paint(android.graphics.Paint.ANTI_ALIAS_FLAG)
自 Compose 1.1.0-alpha01 Image 采用可选的 FilterQuality 参数。将 FilterQuality.None 用于像素艺术:
Image(
...,
filterQuality = FilterQuality.None
)