我正在制作一款针对Android的像素游戏。我正在使用32x32图像。为了使游戏看起来相同,无论屏幕尺寸如何,我都动态地放大图像。我的问题是,在放大时,部分图像不会保持原始颜色:
6个瓷砖,最初为32x32。正如你所看到的,在黑色边缘之前有一条不需要的阴影线(大概是黑色和红色的平均值)。
这是我用于缩放的代码:
public abstract class Drawable {
protected int x;
protected int y;
protected Bitmap image;
Drawable(Bitmap image, int x, int y, float scale) {
this.x = x;
this.y = y;
this.image = Bitmap.createScaledBitmap(image, (int)(image.getWidth()*scale), (int)(image.getHeight()*scale), false);
}
abstract void draw(Canvas canvas);
}
正如您所看到的,我没有使用过滤器。这会使边缘区域更加模糊。是否有另一个过滤器,如果我在哪里使用true,在放大时实际上是否能够保持图像的清晰度?
编辑:
我现在尝试了这种方法:
scaledRect = new RectF(x, y, x+image.getWidth()*scale, y+image.getHeight()*scale);
paint = new Paint();
paint.setAntiAlias(false);
paint.setDither(false);
paint.setFilterBitmap(false);
在平局电话中:
canvas.drawBitmap(this.image, null, scaledRect, paint);
没有成功......
答案 0 :(得分:1)
Android默认使用双线性插值算法处理位图缩放。你要做的是最近邻插值。
制作一个Paint
,关闭抖动和消除别名,不要通过createScaledBitmap
绘制并试试这个:
paint.setDither(false);
paint.setAntiAlias(false);
canvas.drawBitmap(bitmap, null, new RectF(left, top, width, height), paint);