gpt4 book ai didi

java - 缩放后的 "straight line"图像跳出线条

转载 作者:行者123 更新时间:2023-12-01 21:13:11 26 4
gpt4 key购买 nike

放大图像时遇到问题。我有一个如下所示的 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;
}

当程序启动时,我加载图像,并在所有 4 个方向上旋转它,因此我不必在程序运行时一遍又一遍地执行此操作。

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);

最佳答案

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

g2d.drawImage(img, x, y, 宽度, 高度, null);

你可以简单地使用

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

它基本上做同样的事情,但是当我放大它时,它使用这个平滑制作键。

我尝试了这个,发现它不太舒服,因为它滞后很多。

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

正如我所说,这种方法有点模糊,但如果没有其他方法可以避免这个问题,我必须使用它。你几乎看不到模糊,所以这对我来说是一个选择。

关于java - 缩放后的 "straight line"图像跳出线条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58892903/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com