有没有什么方法可以得到一个;倒“;在Java中绘制的剪辑区域?

有没有什么方法可以得到一个;倒“;在Java中绘制的剪辑区域?,java,graphics,java-me,paint,Java,Graphics,Java Me,Paint,我想用图形填充FieldRealSub()的区域,但我希望中间的一个矩形不能填充。< /P> 基本上,给定一个100x30的组件,我想将剪裁设置为大小为80x10的10,10的矩形,但让填充只绘制80x10矩形外的区域。原因是,我想要一个n像素的边界,并在不影响内部组件区域的情况下绘制一个曲线轮廓 到目前为止,我能看到的最好的方法是剪辑到10,10 90x10,然后执行fillRoundRect(),然后剪辑到90,10 10x10,然后执行fillRect(),以填充右侧、拐角下方和上方 如果

我想用图形填充FieldRealSub()的区域,但我希望中间的一个矩形不能填充。< /P> 基本上,给定一个100x30的组件,我想将剪裁设置为大小为80x10的10,10的矩形,但让填充只绘制80x10矩形外的区域。原因是,我想要一个n像素的边界,并在不影响内部组件区域的情况下绘制一个曲线轮廓

到目前为止,我能看到的最好的方法是剪辑到10,10 90x10,然后执行fillRoundRect(),然后剪辑到90,10 10x10,然后执行fillRect(),以填充右侧、拐角下方和上方

如果我简单地重新绘制一个单线矩形,那么我最终会在角点上进行“点画”,因为曲线不太相邻(和/或因为AA影响周围的像素)

编辑:警告-我需要一种方法来做到这一点,它将与J2MEAWT(个人档案1.1的CDC)以及J2SE一起工作


编辑:另一个是我能够适应的。适用于我的情况的代码作为自我回答发布。

请检查我对问题的回答。这是非常相似的

编辑:您可能想检查AlphaComposite是否在j2me中可用。在Java中,您可以通过更改alpha合成模式(我记不起它的srcIn到底是哪个模式)和在图像上绘制黑白区域来模拟剪辑。你可能想看看。

在另一个问题上,我也有一个问题,那就是使用多边形作为AWT剪辑。也许这在J2ME中得到了支持?您需要知道要排除的矩形的边界以及绘图区域的外部边界

+-------------------+ | clip drawing area | +---+-----------+ | | | excluded | | | | area | | | +-----------+ | | | +-------------------+ 我将其设置到图形上下文中,然后填充我的矩形:

Rectangle tmp=new Rectangle(px,py,pw,ph);
gc.setClip(getOutsideEdge(gc,tmp,thickness,thickness,thickness,thickness));
gc.fillRoundRect(px,py,pw,ph,RADIUS,RADIUS);
然后我通过在每个角上画一个点,创造了圆角的错觉:

gc.setClip(px,py,pw,ph);
gc.drawLine((px   +thickness  ),(py   +thickness  ),(px   +thickness  ),(py   +thickness  ));
gc.drawLine((px+pw-thickness-1),(py   +thickness  ),(px+pw-thickness-1),(py   +thickness  ));
gc.drawLine((px   +thickness  ),(py+ph-thickness-1),(px   +thickness  ),(py+ph-thickness-1));
gc.drawLine((px+pw-thickness-1),(py+ph-thickness-1),(px+pw-thickness-1),(py+ph-thickness-1));

是的,看起来这将适用于J2SE,但解决方案也需要适用于J2ME(抱歉,我最初没有包括这一要求)。J2ME PP 1.1没有java.awt.geom包。伙计!支撑手持设备是一种痛苦!是的,你应该更改标签和标题。在我提供的问题中,请检查答案是否由我提供。也许这对你有用。+1为我指出了一个类似的问题,这个问题有一个答案,我能够将其应用到一个有效的解决方案中。简要说明:你用了额外的1分。点(ol,it)是不必要的,因为你可以从左上角的外角到左上角的内角,没问题。我不知道为什么这里有一个“objective-c”标记…@Quinn:谢谢你的更正-我在标记字段中键入了“J2ME”,但我怀疑按tab键从Tags字段到Edit Summary切换了标记,我没有注意到!我发现tags字段的tab行为非常烦人/违反直觉。
gc.setClip(px,py,pw,ph);
gc.drawLine((px   +thickness  ),(py   +thickness  ),(px   +thickness  ),(py   +thickness  ));
gc.drawLine((px+pw-thickness-1),(py   +thickness  ),(px+pw-thickness-1),(py   +thickness  ));
gc.drawLine((px   +thickness  ),(py+ph-thickness-1),(px   +thickness  ),(py+ph-thickness-1));
gc.drawLine((px+pw-thickness-1),(py+ph-thickness-1),(px+pw-thickness-1),(py+ph-thickness-1));