Java - 有没有办法制作形状图像?

时间:2016-12-25 21:53:30

标签: java image bufferedimage capture

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:-1)

这一切都取决于图像采样的工作原理

当从现实世界(或渲染)拍摄图像时,它们以像素为单位进行采样。这些像素的数量称为空间分辨率:宽度*高度。所以很明显,图像总是表示为矩形,因此可以使数学更容易。想象一下,如果它们处于径向坐标中,那么渲染图像会有多少额外工作;)

但是,如果它显示您要询问的图像。当然,你可以用你喜欢的任何形状显示它们。看一下应用程序如何在一个圆圈中显示头像。

如何在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更适合“时尚”用户界面。看看这个例子 Border-Radius and Shadow on ImageView