java - 将图像绘制到 4 个不同的点

标签 java image graphics2d

我在 Path2D 中绘制了一个四边形,我希望上面有一个图像。更具体地说,我试图将我选择的图像绘制到四边形上的 4 个不同点。就我而言,它是一个平行四边形。我不希望图像超出平行四边形。了解我想说的内容的更好方法是查看下面的屏幕截图。

我希望将图像转换为适合绿色区域。未剪辑。

screenshot

我希望将图像固定在绿色平行四边形上。然而。我不希望图像进入蓝色平行四边形或重要的空白区域。

到目前为止我已经尝试过

  • 正在研究一种将图像直接放置到 Path2D.Double() 对象上的方法。没有答案
  • 旋转图像以适合平行四边形。没用。
  • 在java中使用AffineTransform。不明白;-;

谢谢。我是java新手,所以请宽容点吗?

最佳答案

一种方法是:

  1. 创建一个单独的 BufferedImage。
  2. 对新图像应用变换。
  3. 将您的图像绘制到新图像上。
  4. 使用绿色区域的 Shape 对象作为主绘图区域上的剪辑
  5. 将变换后的图像绘制到主绘图区域。

我已经有一段时间没有进行转换了。您可能必须先设置变换,然后再绘制图像。 变换必须先行。

public void paintComponent(Graphics g) {
    Graphics2D g2 = (Graphics2D)g;
    g2.transform(AffineTransform.getShearInstance(1.0, 0));
    g2.drawImage(image, 0, 0, this);
}

这是一个说明转换如何工作的简单示例。您将不得不花一些时间来弄清楚需要哪些值才能使其工作,或者您是否可能需要自己手动创建转换矩阵。

关于java - 将图像绘制到 4 个不同的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37820195/

相关文章:

java - Apple Java 属性 apple.awt.graphics.UseQuartz 的 Windows(和 Linux?)等效项是什么?

java - 连接到 SMTP 服务器时出现 SocketException,但使用 telnet 时可以正常工作

Java 对列表

javascript - 用于导航的悬停和 onClick 效果上的图像

javascript - Fabric.js "reverse"和 "layered"剪裁/剪裁

java - 如何.setStroke(BasicStroke)?

java - 外面填充一个圆圈,里面变成透明

java - PDF 中的 HTML 嵌入图像

java - 为什么生成的 URL 中缺少我的参数值?

c++ - 如何在 OpenCV 中基于线分割图像