ポリゴンを AWT クリップとして使用するという他の質問についても同様の回答があります。これは J2ME でサポートされているのでしょうか。除外する四角形の境界と、描画領域の外側の境界を知る必要があります。
+---------------------+
| | クリップ描画領域 |
+---+-----------+ |
| | | | 除外 | | |
| | | | エリア | | |
| | +---------+ |
| | | |
+---------------------+
OPから編集。
この答えは私にとってはうまくいき、APIはJ2MEでサポートされています。他の質問の答えには1つの間違いがあるようです.囲まれた多角形を作成するには、座標のセットが外側の左と内側の上にある点を開始する必要があります. 動作した私の最終的なコードは次のとおりです。
クリッピング シェイプを作成するには、次の方法を使用しました。
static public Shape getOutsideEdge(Graphics gc, Rectangle bb, int top, int lft, int btm, int rgt) {
int ot=bb.y , it=(ot+top);
int ol=bb.x , il=(ol+lft);
int ob=(bb.y+bb.height), ib=(ob-btm);
int or=(bb.x+bb.width ), ir=(or-rgt);
return new Polygon(
new int[]{ ol, ol, or, or, ol, ol, il, ir, ir, il, il },
new int[]{ it, ot, ot, ob, ob, it, it, it, ib, ib, it },
11
);
}
これを Graphics コンテキストに設定してから、四角形を塗りつぶしました。
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);
次に、各コーナーに 1 つのドットをペイントして、内側のコーナーが丸くなっているような錯覚を作成しました。
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));