1
我想绘制一个出褪色透明椭圆高亮平铺屏幕上的瓷砖。遗憾的是我没能找到Swing
已实现的功能,能做到这一点,所以我写了我自己:绘制出褪色透明椭圆
private void drawGradientedOval(Graphics2D g2d, Rectangle bounds) {
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
int loops = (int) Math.min(bounds.getWidth()/2, bounds.getHeight()/2);
int x = bounds.x + (int) (bounds.getWidth()/2);
int y = bounds.y + (int) (bounds.getHeight()/2);
int scale = 1;
float alpha = 0.5f;
float step = alpha/loops;
for (int i = 0; i < loops; i++) {
g2d.setColor(new Color(1f, 1f, 1f, alpha));
g2d.drawOval(x--, y--, scale, scale);
scale += 2;
alpha -= step;
}
}
产生的椭圆形的样子(作物比椭圆形范围大):
结果不是一个光滑的椭圆形,有一个“十字”和一些其他小的文物。
我认为这是由彼此重叠绘制的“重叠”像素造成的。
有没有一种明智的方法来解决这个问题?
请注意,我宁愿避免实现像Raster
级别上操纵单个像素的较低级别的解决方案,仅仅是因为这项工作涉及大量上述未提及的变量。
+1所付出的努力,但颜色之间的解决方案梯度。有没有办法将它与透明度一起使用?该解决方案不得覆盖以前的像素值。 –
会设置'COLORS = {新颜色(1f,1f,1f,0.5f),新颜色(1f,1f,1f,0)'工作? –
(1+)绘画@DimaMaligin - '会设置....工作?'你为什么不试试我?只有你知道确切的要求。 – camickr