gpt4 book ai didi

java - 使用java 2D图形旋转的黑色区域?

转载 作者:行者123 更新时间:2023-11-29 03:27:55 30 4
gpt4 key购买 nike

我将首先展示错误的示例,然后我将解释如何,最后我将提出我的问题。

这是我要旋转的图片。

Just and example picture for stackoverflow

我将它多次旋转 90 度和 270 度,然后将它们
组合成一个大的缓冲图像。

我用来旋转单个 bufferedImage 的代码是这样的:

public static BufferedImage rotate(BufferedImage img, int angle) {  
int w = img.getWidth();
int h = img.getHeight();

BufferedImage dimg = new BufferedImage(w, h, img.getType());

Graphics2D g = dimg.createGraphics();
g.rotate(Math.toRadians(angle), w/2, h/2);
g.drawImage(img, null, 0, 0);
return dimg;
}

旋转的结果看起来像这样。

Rotation with native width and height

那些黑条是这些的原因是因为在代码中你可以清楚地看到我创建了一个单独的缓冲图像,这将是最终图像。

它使用原始宽度和高度,因为图像旋转了高度开关,所以我通过将 BufferedImage dimg = new BufferedImage(w, h, img.getType()); 更改为对此进行了补偿BufferedImage dimg = new BufferedImage(h, w, img.getType());

我认为这会解决我的问题是合乎逻辑的。
但我错了,轮换的结果是这样的。

rotation with with and height switch所以从现在开始,我不知道为什么要这样做。
我可能只是忽略了一件小事,或者这是一个常见错误,即使我找不到
任何发生这种情况的实例。

所以这是我要问你的问题,为什么要这样做?我该如何解决这个问题。

最佳答案

图像不是方形的。如果将其旋转 90°,则会创建一个需要填充的间隙。

解决方案:

  • 确保图片是方形的
  • “旋转”尺寸:当您旋转 90° 或 270° 时,您需要创建一个具有交换宽度和高度的目标图像(即 200x100 -> 100x200)
  • 裁剪图像。对你来说很好,因为缩放会使箭头看起来很糟糕,但它可能会偏离中心
  • 缩放图像。如果是 609x579,将其缩小到 579x579(缩小通常看起来会好一点)。
  • 找到边框颜色,用旋转后的边框颜色填充空隙

关于java - 使用java 2D图形旋转的黑色区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20046460/

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