0

我经常需要在对象中绘制项目,Graphics而我一直这样做的方式是拥有一个DrawItem接收Graphics对象和一个offsetXoffsetY参数的函数,这些参数确定将在哪个点绘制项目。

问题是,DrawItem如果有一种方法Graphics可以给我一个 X 和 Y 轴零点在其他点的图形版本,那么里面的代码看起来会好很多,比如myGraphics.DisplacedGraphics(offsetX, offsetY). 这样,我只需将此Graphics对象传递给我的DrawItem方法,该方法不需要接收其他两个参数。有没有这样的功能或最接近的东西是什么?

编辑:与此同时,这是我写的,但似乎是一个基本要求,我仍然希望已经存在这样的功能(我仍然需要添加一堆方法,但这些都是我现在所需要的)(注意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 回答