Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 完全放大小位图像素_Java_Android_Image_Bitmap_Filtering - Fatal编程技术网

Java 完全放大小位图像素

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

我正在为android制作一款像素游戏。我使用的是32x32图像。为了使游戏看起来一样,无论屏幕尺寸如何,我都会动态放大图像。我的问题是,放大时,部分图像无法保持其原始颜色:

6块瓷砖,原来是32x32。如您所见,在黑色边缘之前有一条不需要的阴影线(可能是黑色和redish颜色的平均值)

这是我用于缩放的代码:

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)对其进行缩放现在保持图像的清晰。