0

グラフィックで作成したものを保存する可能性はありますか? 例えば:

Graphics g = PanelOne.CreateGraphics();
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
g.DrawLine(p, beginn, end);

行全体をオブジェクトとして保存することはできますか?

その理由は、非常に基本的な Drawtool をプログラムする必要があり、これには「元に戻す」機能が必要だからです。現時点では、ポイントを配列に保存し、ユーザーがバックスラッシュキーを押すとそれらを白く上書きしますが、パフォーマンスが信じられないほど遅く、震えます。

また、線をドラッグ アンド ドロップする可能性を追加したいと思うかもしれません。線がオブジェクトに保存されている場合、これははるかに簡単になります。

事前に感謝します。

4

1 に答える 1

2

Paintそれは可能ですが、メソッド内のすべてのオブジェクトを描画する必要があります。

public abstract class DrawingObject
{
    public abstract void Draw(Graphics g);
}

public class Line : DrawingObject
{
    public Point Start { get; set; }
    public Point End { get; set; }
    public float Thickness { get; set; }
    public Color Color { get; set; }

    public override void Draw(Graphics g)
    {
        g.DrawLine(new Pen(Color, Thickness), Start, End);
    }
}

// Other classes derived from `DrawingObject`

フォームに のリストを保存し、DrawingObjects必要に応じて描画します。

public partial class MainForm : Form
{
    //...

    List<DrawingObject> _objects = new List<DrawingObject>();

    private void PanelOne_Paint(object sender, PaintEventArgs e)
    {
        base.OnPaint(e);

        foreach (var o in _objects)
        {
            o.Draw(e.Graphics);
        }
    }
}

オブジェクトに変更が発生したときに、パネルのInvalidate()メソッドを呼び出します (改行、行の削除、行の移動など)。

描画中のちらつきを避けるためDoubleBufferに、パネルのプロパティを に設定できますtrue

于 2013-03-05T12:53:22.493 に答える