2

私は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 を使用しようとしましたが、インスタンスを破棄し、実際のオブジェクトを削除しないようです。

ありがとう!

4

1 に答える 1

3

Cairo はステンシル/ペイント モデルを使用するため、描画は (通常) 既存の画像の上に行われます1

レイヤーやオブジェクトは維持されません。紙に描くのと同じように、描いた円を移動したり変更したりすることはできません。ピックスマップのパターンになっています。

円を削除するには、画像全体を元の背景 ( ) で塗りつぶし、円以外cairo_set_source_rgb(cr, 1, 1, 1); cairo_paint(cr)のすべてを再描画します。

1. ラスター オペコードを変更して、他のタイプの合成を行うことができます。

于 2013-04-28T05:09:46.787 に答える