有没有在 Java 中使用 GradientPaint 的替代方法?
基本上此时,当我用纯色填充应用程序中的所有矩形时,我的代码速度可以接受。
但是,一旦我开始使用 GradientPaint,一个动作的性能就会下降 1 秒。
举个例子,一个动作是:点击一个图片,然后图片就弹出来很大。
我喜欢保持 GradientPaint 的外观,因为普通填充看起来很糟糕......但我不想失去性能。GradientPaint 有什么替代品吗?
我希望我的问题不是太含糊,但 GradientPaint 似乎太慢了。我尝试手动实现 GradientPaint 并且性能接近 Java 实现,因此可能表明 GradientPaint 根本无法更有效地完成。
使用 GradientPaint 的代码:
private void drawRectangle(final Graphics2D g2d, int width, int height, int x, int y, final int borderSize, final Color color) {
g2d.setColor(color);
g2d.fillRect(x, y, width, height);
//account for border distance
x += borderSize;
y += borderSize;
width -= 2 * borderSize;
height -= 2 * borderSize;
int mx = (int)Math.round(x + (width / 2));
int my = (int)Math.round(y + (height / 2));
Color colorEdge = alphaColor(color, 192);
Color colorInside = alphaColor(color, 128);
Composite oldComposite = g2d.getComposite();
g2d.setComposite(AlphaComposite.SrcIn);
g2d.setColor(color);
GradientPaint paintQ1 = new GradientPaint(x, y, colorEdge, mx, my, colorInside);
g2d.setPaint(paintQ1);
g2d.fillRect(x, y, mx - x, my - y);
GradientPaint paintQ2 = new GradientPaint(x + width - 1, y, colorEdge, mx, my, colorInside);
g2d.setPaint(paintQ2);
g2d.fillRect(mx, y, mx - x, my - y);
GradientPaint paintQ3 = new GradientPaint(x, y + height - 1, colorEdge, mx, my, colorInside);
g2d.setPaint(paintQ3);
g2d.fillRect(x, my, mx - x, my - y);
GradientPaint paintQ4 = new GradientPaint(x + width - 1, y + height - 1, colorEdge, mx, my, colorInside);
g2d.setPaint(paintQ4);
g2d.fillRect(mx, my, mx - x, my - y);
g2d.setComposite(oldComposite);
}
private Color alphaColor(final Color c1, final int alpha) {
return new Color(c1.getRed(), c1.getGreen(), c1.getBlue(), alpha);
}
每个图像仅调用 3 次,总面积约为 500 x 700 像素的两倍。
问候。