缩放后的“直线”图像跳出直线

a在放大图像时遇到问题。我有一个看起来像这样的png文件: raw png

图片为8px * 8px,上面有一些红色直线。 但是,当我使用Java绘制此图像并将其放大时,会发生这种情况:java image

正如您几乎可以看到的那样,该线不是完全笔直。它总是偏离一个像素,并形成这种波浪形。如果图像被绘制在框架的其他位置,则“波浪”位于其他位置。图像旋转了90°,但我没有旋转就对其进行了测试,它仍然在那里。除此之外,我还需要旋转图像。

有什么办法可以解决这个问题?我在同一Graphics2D对象中启用了文本抗锯齿功能。对此是否也有一定的要求?

代码

private void loadImage(String path,int field,int imageNumber) {
    BufferedImage image;
    image = new Resource().readImg(path);
    images[field][imageNumber][0] = image;
    images[field][imageNumber][1] = rotateclockwise90(image);
    images[field][imageNumber][2] = rotateclockwise90(rotateclockwise90(image));
    images[field][imageNumber][3] = rotateclockwise90(rotateclockwise90(rotateclockwise90(image)));
}

private BufferedImage rotateclockwise90(BufferedImage src) {
    int width = src.getWidth();
    int height = src.getHeight();

    BufferedImage dest = new BufferedImage(height,width,src.getType());

    Graphics2D graphics2D = dest.createGraphics();
    graphics2D.translate((height - width) / 2,(height - width) / 2);
    graphics2D.rotate(Math.PI / 2,height / 2,width / 2);
    graphics2D.drawRenderedImage(src,null);

    return dest;
}

程序启动时,我会沿所有四个方向旋转图像,因此程序运行时不必一遍又一遍地进行操作。

public BufferedImage getTile(int type,int part,int rotation) {
    return images[type][part][rotation];
}

然后我要做的就是调用此get方法并绘制图像:

g2d.drawImage(tiles.getShipTile(type,part,rotation),x,y,null);
lixuanpei 回答:缩放后的“直线”图像跳出直线

我实际上找到了一种避免这些怪异像素的方法,但是这种方法会使图像有些模糊。 而不是使用

g2d.drawImage(img,x,y,width,height,null);

您可以简单地使用

g2d.drawImage(img.getScaledInstance(width,Image.SCALE_AREA_AVERAGING),null);

基本上具有相同的功能,但是我们使用此平滑制作键将其放大。

我尝试了一下,发现它并不舒适,因为它滞后很多。

所以我只是在开始旋转图像时将其放大。

正如我说的那样,此方法有点模糊,但是如果没有其他方法可以避免此问题,则必须使用此方法。您几乎看不到模糊,因此这对我来说是一个选择。

本文链接:https://www.f2er.com/3089429.html

大家都在问