Java 完全放大小位图像素
我正在为android制作一款像素游戏。我使用的是32x32图像。为了使游戏看起来一样,无论屏幕尺寸如何,我都会动态放大图像。我的问题是,放大时,部分图像无法保持其原始颜色: 6块瓷砖,原来是32x32。如您所见,在黑色边缘之前有一条不需要的阴影线(可能是黑色和redish颜色的平均值) 这是我用于缩放的代码:Java 完全放大小位图像素,java,android,image,bitmap,filtering,Java,Android,Image,Bitmap,Filtering,我正在为android制作一款像素游戏。我使用的是32x32图像。为了使游戏看起来一样,无论屏幕尺寸如何,我都会动态放大图像。我的问题是,放大时,部分图像无法保持其原始颜色: 6块瓷砖,原来是32x32。如您所见,在黑色边缘之前有一条不需要的阴影线(可能是黑色和redish颜色的平均值) 这是我用于缩放的代码: public abstract class Drawable { protected int x; protected int y; protected Bit
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);
没有成功…Android默认使用双线性插值算法处理位图缩放。你要做的是最近邻插值 制作一个
绘制
,关闭抖动和反别名,不要通过createScaledBitmap
绘制,然后尝试以下操作:
paint.setDither(false);
paint.setAntiAlias(false);
canvas.drawBitmap(bitmap, null, new RectF(left, top, width, height), paint);
放大位图会产生模糊的副作用。也许矢量图形就是你要找的。我从未见过有人使用矢量图形制作像素艺术,但我会去看看。尝试添加
paint.setFilterBitmap(false)代码>以及Nevermind,我创建了一个bitmapfactory选项,并在从资源加载位图时将inscaled设置为true。然后我可以使用Bitmap.createScaledBitmap(image,(int)(image.getWidth()*scale),(int)(image.getHeight()*scale),false)对其进行缩放代码>现在保持图像的清晰。