Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何淡出Java2D区域对象的边缘?_Java_Gradient_Shadow_Java 2d_Area - Fatal编程技术网

如何淡出Java2D区域对象的边缘?

如何淡出Java2D区域对象的边缘?,java,gradient,shadow,java-2d,area,Java,Gradient,Shadow,Java 2d,Area,我有一个方法,根据屏幕上的位置创建阴影,该方法的最终产物是一个区域,然后我将其绘制到屏幕上,它包含同一区域中屏幕上的所有阴影。这是因为绘制的阴影是低不透明度的,所以如果不是一个东西,它们会重叠,不透明度会使它看起来很奇怪 问题是我希望阴影看起来像是淡出的,但我完全不知道如何,或者这是否可能。有没有办法软化该区域的边缘或使其渐变淡出?我试着做graphics2D.setPaint(新的GradientPaint[梯度效果]),但它什么也没做 提前谢谢 编辑:这是一个在“建筑”矩形周围制作阴影的程序

我有一个方法,根据屏幕上的位置创建阴影,该方法的最终产物是一个区域,然后我将其绘制到屏幕上,它包含同一区域中屏幕上的所有阴影。这是因为绘制的阴影是低不透明度的,所以如果不是一个东西,它们会重叠,不透明度会使它看起来很奇怪

问题是我希望阴影看起来像是淡出的,但我完全不知道如何,或者这是否可能。有没有办法软化该区域的边缘或使其渐变淡出?我试着做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))。这是因为阴影是部分透明的,如果我没有将它们添加到一个区域(绘制该区域时基本上忽略重叠),它们在阴影重叠处会显得更暗。