2011-09-23 59 views
1

我在C#中有一個很好的工作系統,它在渲染方法中與開羅命令一起繪製。但是,有時我想繪製成像素圖,而不是在屏幕需要更新時動態繪製。例如,目前我有:開羅可以直接繪製到Gtk.Pixbuf嗎?

public override void render(Cairo.Context g) { 
    g.Save(); 
    g.Translate(x, y); 
    g.Rotate(_rotation); 
    g.Scale(_scaleFactor, _scaleFactor); 
    g.Scale(1.0, ((double)_yRadius)/((double)_xRadius)); 
    g.LineWidth = border; 
    g.Arc(x1, y2, _xRadius, 0.0, 2.0 * Math.PI); 
    g.ClosePath(); 
} 

但我想,如果我選擇,將開羅命令渲染到Gtk.Pixbuf。例如:

g = GetContextFromPixbuf(pixbuf); 
render(g); 

這可能嗎?如果我不必將背景轉換回pixbuf,但是cairo繪圖將直接轉到pixbuf,那將會很棒。任何提示,將不勝感激!

回答

1

答案其實很簡單:渲染對象時,將它們渲染到從保存的曲面創建的上下文中。然後,當您渲染窗口時,根據相同的保存表面插入一個上下文。

創建面:

surface = new Cairo.ImageSurface(Cairo.Format.Argb32, width, height); 

渲染形狀的表面:

using (Cairo.Context g = new Cairo.Context(surface)) { 
    shape.render(g); // Cairo drawing commands 
} 

渲染窗口:

g.Save(); 
    g.SetSourceSurface(surface, 0, 0); 
    g.Paint(); 
    g.Restore(); 
     ... // other Cairo drawing commands 

這就是它!

相關問題