我在C#中有一个很好的工作系统,它使用渲染方法中的Cairo命令绘制。但是,有时我想绘制一个像素图,而不是在需要更新屏幕时动态绘制。例如,目前我有:
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。任何提示都将不胜感激!
答案 0 :(得分: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
就是这样!