如何淡出Java2D区域对象的边缘?
我有一个方法,根据屏幕上的位置创建阴影,该方法的最终产物是一个区域,然后我将其绘制到屏幕上,它包含同一区域中屏幕上的所有阴影。这是因为绘制的阴影是低不透明度的,所以如果不是一个东西,它们会重叠,不透明度会使它看起来很奇怪 问题是我希望阴影看起来像是淡出的,但我完全不知道如何,或者这是否可能。有没有办法软化该区域的边缘或使其渐变淡出?我试着做graphics2D.setPaint(新的GradientPaint[梯度效果]),但它什么也没做 提前谢谢如何淡出Java2D区域对象的边缘?,java,gradient,shadow,java-2d,area,Java,Gradient,Shadow,Java 2d,Area,我有一个方法,根据屏幕上的位置创建阴影,该方法的最终产物是一个区域,然后我将其绘制到屏幕上,它包含同一区域中屏幕上的所有阴影。这是因为绘制的阴影是低不透明度的,所以如果不是一个东西,它们会重叠,不透明度会使它看起来很奇怪 问题是我希望阴影看起来像是淡出的,但我完全不知道如何,或者这是否可能。有没有办法软化该区域的边缘或使其渐变淡出?我试着做graphics2D.setPaint(新的GradientPaint[梯度效果]),但它什么也没做 提前谢谢 编辑:这是一个在“建筑”矩形周围制作阴影的程序
编辑:这是一个在“建筑”矩形周围制作阴影的程序截图。绿色矩形用于显示阴影的效果。我想要的最终结果不是阴影突然结束,而是阴影应该淡出。我想您在设置渐变的正确颜色时遇到了问题:
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.GREEN);
g.fillRect(30, 30, 50, 20);
Graphics2D g2d = (Graphics2D) g;
Polygon p = new Polygon(new int[]{10,20,50,50,40,10}, new int[]{10,10,40,50,50,20}, 6);
Area a = new Area(p);
Color b = new Color(0xFF000000, true); //using colors with transparency!!!
Color w = new Color(0x00FFFFFF, true); //using colors with transparency!!!
//try to use proper values for the x/y values - both, start and end
GradientPaint gradient = new GradientPaint(0, 0, b, 40, 40, w);
g2d.setPaint(gradient);
g2d.fill(a); // fill your area!
}
结果是具有alpha(透明度)的渐变
以红色绘制的区域使用渐变绘制的区域
不要忘了将100%不透明(
0xFF000000
为黑色100%不透明)的alpha值0xAARRGGBB
设置为FF
为100%不透明)设置为0(0x00FFFFFF
白色,100%透明)也许你可以给我们展示一个示例区域和你遇到的问题(一张图片显示了1000多个单词)我添加了一个屏幕快照嗯,对不起,尝试添加图像时出现问题:/图像不可见!哎呀,这是真的!谢谢你的回答,但不幸的是,这种方法对我不起作用,因为该区域包含多个阴影(对我发布的图像进行成像,但屏幕上有几个其他的“建筑物”,每个都有阴影,其中每个阴影都在一个区域内。这意味着我无法获得渐变线的端点。这就是为什么我对如何使该区域的边缘变暗/褪色更感兴趣。@Miles你能告诉我更多关于你所在区域的信息吗?所以每次一个ne添加w building时,会执行一种生成阴影的方法,从技术上讲,该方法会根据光源的位置查看每个建筑的角,并相应地生成多边形。然后,它会将这些多边形中的每一个添加到一个区域(仅Java2D区域,如Area a=new Area();a.add(polygon))。这是因为阴影是部分透明的,如果我没有将它们添加到一个区域(绘制该区域时基本上忽略重叠),它们在阴影重叠处会显得更暗。