2011-09-23 4 views
1

나는 render 메소드에서 카이로 명령으로 그려주는 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로 되돌릴 필요가 없다면 좋겠지 만, 카이로 드로잉은 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 

의 그!

관련 문제