0

オブジェクトにアイテムを描画する必要があることがよくありGraphicsます。これまでのやり方は、オブジェクトと、アイテムが描画されるポイントを決定するパラメーターDrawItemを受け取る関数を使用することです。GraphicsoffsetXoffsetY

問題は、X軸とY軸のゼロが他のポイントにあるグラフィックスのバージョンを提供DrawItemするメソッドがあれば、内部のコードがはるかに見栄えが良くなることです。このようにして、このオブジェクトをメソッドに渡すだけで、他の2つのパラメーターを受け取る必要はありません。そのような機能はありますか、それとも最も近いものは何ですか?GraphicsmyGraphics.DisplacedGraphics(offsetX, offsetY)GraphicsDrawItem

編集:その間、これは私が書いたものですが、そのような基本的な要件のようですが、そのような機能がすでに存在することを願っています(まだたくさんのメソッドを追加する必要がありますが、これらは今のところ必要なすべてです)(DisplacedCanvas方法):

public class Canvas
{
    private readonly Graphics _Graphics;
    private readonly int _OriginX = 0;
    private readonly int _OriginY = 0;

    public Canvas(Graphics graphics, int originX, int originY)
    {
        _Graphics = graphics;
        _OriginX = originX;
        _OriginY = originY;
    }

    public Canvas(Graphics graphics) : this(graphics, 0, 0) { }

    public SizeF MeasureString(string text, Font font)
    {
        return _Graphics.MeasureString(text, font);
    }

    public void FillRectangle(Brush brush, int x, int y, int width, int height)
    {
        _Graphics.FillRectangle(brush, _OriginX + x, _OriginY + y, width, height);
    }

    public void DrawString(string s, Font font, Brush brush, float x, float y)
    {
        _Graphics.DrawString(s, font, brush, _OriginX + x, _OriginY + y);
    }

    public Canvas DisplacedCanvas(int x, int y)
    {
        return new Canvas(_Graphics, _OriginX + x, _OriginY + y);
    }
}
4

1 に答える 1

1

TranslateTransform()メソッドがあなたが求めていることを実行すると確信しています。

原点は通常、描画面の左上隅です。変換操作は、変換行列に、変換部分が dx および dy パラメータである行列を乗算することで構成されます。このメソッドは、変換マトリックスに変換マトリックスを追加することによって変換を適用します。

したがって、新しい原点を 100、50 にしたい場合はgraphics.TranslateTransform(100, 50)、画像を描画する前にまず呼び出します。

于 2013-03-10T17:00:05.577 に答える