2013-04-27 77 views
1

我正在使用cairo繪製一些弧線,下面是函數。開羅:重新填充對象(圓圈)並刪除它

cairo_t* drawCircle(cairo_surface_t *container, int x, int y, int r, int cr, int cg, int cb, int ca) 
{ 
    cairo_t    *cairoInstance;                                 //Create instance 
    cairoInstance = cairo_create(container); 

    cairo_set_source_rgba(cairoInstance, 0,0,1,0.5); 
    cairo_arc(cairoInstance, x, y, r, 0, 2*M_PI); 
    cairo_stroke_preserve(cairoInstance); 
    cairo_fill(cairoInstance); 


    gtk_widget_queue_draw_area(GTK_WIDGET(window), 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT); //Redraws the window 

return cairoInstance; 
} 

第一個問題:當我稍後更改source_rgba然後填充時,它會填充上一個顏色。有沒有辦法在重新填充顏色之前重新填充顏色?

其次,如果我想稍後放棄/刪除弧/圓,我該怎麼做?我試圖使用cairo_destroy,但它似乎銷燬實例並不刪除實際的對象。

謝謝!

+0

「重置填充」是什麼意思? – 2013-04-28 05:06:08

+0

刪除以前的顏色,基本上是100%的透明圓。 – 2013-04-28 05:42:40

回答

2

開羅使用模板/油漆模型,因此繪圖(通常)在現有圖像頂部完成。

它不維護圖層或對象。就像在紙上畫畫一樣,你不能移動修改繪製後的圓圈。它已經成爲像素圖中的一種模式。

刪除圓,填充整個圖像與原始背景(cairo_set_source_rgb(cr, 1, 1, 1); cairo_paint(cr)),並重繪一切除了圓。

1.您可以更改光柵操作碼以執行其他類型的合成。

+0

你如何建議我用原始背景填充圖像? – 2013-04-28 05:41:28

+0

已編輯。原始背景只是白色的,對吧? – 2013-04-28 05:52:57

+0

背景是一個圖像。所以基本上,我在圖像上繪製了一些圈子。 – 2013-04-28 05:54:29