【发布时间】:2012-06-05 17:46:04
【问题描述】:
我有一个从 png 图像中绘制形状的类,这样我就可以使用该形状来绘制我的项目所需的自定义按钮的边框。这是该类绘制图像形状的代码:
public class CreateShapeClass {
public static Area createArea(BufferedImage image, int maxTransparency) {
Area area = new Area();
Rectangle rectangle = new Rectangle();
for (int x = 0; x < image.getWidth(); x++) {
for (int y = 0; y < image.getHeight(); y++) {
int rgb = image.getRGB(x, y);
rgb = rgb >>> 24;
if (rgb >= maxTransparency) {
rectangle.setBounds(x, y, 1, 1);
area.add(new Area(rectangle));
}
}
}
return area;
}
}
但是,这需要很长时间来处理,我认为通过在我的主应用程序中预先绘制形状,然后将它们存储到数组中并传递给其他类,可以减少渲染时间。然而,paintBorder() 方法绘制按钮边框所花费的时间也需要相当长的时间(虽然比绘制形状所需的时间短),因为上面的类生成的形状被填充而不是空的。我尝试使用 java2d 绘制形状,例如 Ellipse2D,并且按钮的呈现只需要很短的时间。在这个领域有经验的任何人都可以教我如何生成作为 BufferedImage 边界的形状?我使用上面的类从具有透明背景的 PNG 图像创建形状。
【问题讨论】:
-
不好意思,能不能帮我看看,获取大纲用的是哪些部分?我对形状等不是很熟悉:/请指导我。
-
啊,好的,谢谢!无论如何,与我上面使用的类相比,这种方法真的非常快.. 结果不到一秒就出来了!与上述方法不同,它需要大约 +-13 秒来处理。再次感谢!
-
很高兴你把它整理好了。 :) 我输入了 cmets 作为答案,有机会请accept 它。
标签: java image border awt shape