Java - 有什么方法可以制作异形图吗?

Java - Is there any way to make a shaped image?

这可能是一个奇怪的问题,但对我来说很有趣。 当我们使用 java 创建图像时,我们使用:

BufferedImage screencapture = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()) );

但是它使用new Rectangle作为图像形状,有什么办法可以改变图像形状吗?我在我的 eclipse 编辑器中没有看到任何选项。 如果有,请举个例子。

我没有看到任何可能的方法来创建不同形状的图像

Here 是 awt 中可用 类 的列表(我们从中获取图像形状)。 在此列表中,没有任何其他可用的形状。

方法 createScreenCapture()java.awt.Rectangle 作为其唯一参数 - 因此我们只能使用矩形。也没有可供选择的重载。

图像本身也是一个矩形,计算机不太可能读取任何其他形状(如果有可能创建不同形状的图像)。

一切都归结为图像采样的工作原理

当图像取自现实世界(或渲染)时,它们以像素为单位进行采样。这些像素的数量称为空间分辨率:宽度*高度。所以很明显图像总是表示为矩形,这样可以使数学更容易。试想一下,如果图像在径向坐标中,渲染图像需要做多少额外的工作 ;)

但是,如果是您所询问的图像的显示。然后你当然可以把它们展示成你喜欢的任何形状。比如看whats app怎么把头像显示成一个圆圈

如何在Java中实现?

您将必须创建自己的 JComponent,很可能是 JLabel 的子类,并覆盖 paint 方法以满足您的需要。像

public class MyCircularLabel extends JLabel{

BufferedImage image;
//constructors, setters , getters ...

@Override
paint(Graphics g){
super.paint(g);
//initialize some polygon
//draw the image in the shape you prefer here
}

}

老实说,我从来没有尝试过这样的事情。但总的来说,当您希望以不同于默认的方式绘制 GUI 时,您就是这样做的:您覆盖 paint

您可能还想看看 JavaFx,因为它比 Swing 更适合 "stylish" UI。看这个例子 Border-Radius and Shadow on ImageView