5

1ピクセルのストロークでポリゴンを描画しようとしています。ポリゴン全体が100でスケーリングされるため、線幅を0.01に設定しました。ただし、何らかの理由で、ポリゴンは1ではなく100ピクセルのように見える画面上の線幅で描画されます。

GeneralPath多角形として使用しています。図形の描画に同じアプローチを使用すると、細い線が描画されLine2Dます。

g2d.scale(100, 100);
g2d.setStroke(new BasicStroke(0.01f));
g2d.draw(theShape);

新しい情報:以前にGraphics2Dオブジェクトに0.02fのBasicStrokeが設定されていたため、setStrokeラインを削除すると2ピクセルのラインが正しく取得されます。

これが実際のsetStrokeラインです

g.setStroke(new BasicStroke((float) (1f / getRoot().scaleX)));
4

3 に答える 3

5

次のコードは、以下の出力を生成します。コードのどこかにエラーがあるはずです。おそらくscale、質問で省略した別の呼び出し:

import java.awt.*;

public class FrameTest {
    public static void main(String[] args) throws InterruptedException {

        JFrame f = new JFrame("Demo");
        f.getContentPane().setLayout(new BorderLayout());    
        f.add(new JComponent() {
            public void paintComponent(Graphics g) { 
                Graphics2D g2d = (Graphics2D) g;

                GeneralPath theShape = new GeneralPath();
                theShape.moveTo(0, 0);
                theShape.lineTo(2, 1);
                theShape.lineTo(1, 0);
                theShape.closePath();

                g2d.scale(100, 100);
                g2d.setStroke(new BasicStroke(0.01f));
                g2d.draw(theShape);
            }
        });

        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(300, 300);
        f.setVisible(true);
    }
}

ここに画像の説明を入力

于 2010-06-04T12:51:01.283 に答える
0

これにより、線の幅も1pxに設定されます。

graphics2D.setStroke(new BasicStroke(0));
于 2012-02-18T18:46:39.317 に答える