0

Graphicsクラス (交差した線のみ) でグリッドを描画し、次の図のような透明な表現を描画する必要があります。

ここに画像の説明を入力

すべての線/長方形を描く以外の方法はわかりません。フィールドが広いと性能が悪い。これらのものを描くためのより良い方法はありますか?

グリッドを描画する現在のコードは次のとおりです。

    private void drawGrid(Graphics pGraphic, int pGridSize)
    {
        int verticalCount = this.mPicScreen.Width / pGridSize + 1;
        int horizontalCount = this.mPicScreen.Height / pGridSize + 1;

        Pen p = new Pen(Color.Gray);

        // Vertical Lines
        for (int i = 0; i < verticalCount; i++)
        {
            pGraphic.DrawLine(p,
                new Point(i * pGridSize, 0),
                new Point(i * pGridSize, this.mPicScreen.Height));
        }

        // Horizontal Lines
        for (int i = 0; i < horizontalCount; i++)
        {
            pGraphic.DrawLine(p,
                new Point(0, i * pGridSize),
                new Point(this.mPicScreen.Width, i * pGridSize));
        }
    }
4

2 に答える 2

0

コントロールは、描画の進行中に実際にはちらつきます (コントロールが意図的に無効化されているため)。パフォーマンスの問題ではありませんが、実際にはコントロールがそうではなかったからDoubleBufferedです。

DoubleBufferedで有効にするコードは次のControlsとおりです。

public static void setDoubleBuffered(System.Windows.Forms.Control c)
{
    if (System.Windows.Forms.SystemInformation.TerminalServerSession)
        return;

    System.Reflection.PropertyInfo aProp =
          typeof(System.Windows.Forms.Control).GetProperty(
                "DoubleBuffered",
                System.Reflection.BindingFlags.NonPublic |
                System.Reflection.BindingFlags.Instance);

    aProp.SetValue(c, true, null);
}
于 2012-08-20T03:23:46.133 に答える