我經常需要繪製一個Graphics
對象,我一直在做的方式是項目有接收Graphics
對象和offsetX
和offsetY
參數,確定此時該項目將被繪製的功能DrawItem
。移動圖形軸或在任意點獲取子圖形?
的問題是,裏面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);
}
}