2013-03-10 18 views
0

我經常需要繪製一個Graphics對象,我一直在做的方式是項目有接收Graphics對象和offsetXoffsetY參數,確定此時該項目將被繪製的功能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); 
    } 
} 

回答

1

我敢肯定的是,TranslateTransform() method會做你問什麼。

原點通常是繪圖表面的左上角。翻譯操作包括將變換矩陣乘以一個矩陣,其中翻譯部分是dx和dy參數。該方法通過將轉換矩陣前置到轉換矩陣來應用轉換。

所以,如果你想要新的原點在100,50,那麼你在繪製圖像之前首先要調用graphics.TranslateTransform(100, 50)