1

私は GtkDrawingArea に取り組んでいます。これは公開イベントで、pixbuf のセクションをタイル状に描画しています。タイリング タイプは、ソース イメージによって異なります。直交、等角、または六角形にすることができます。これを gdk_draw_pixmap で描画するのは簡単です。アイソメ タイルの検索方法の例を次に示します。

for(y=0,row=0; y+tile_height<height; y+=tile_half_height,++row)
  for(x=((row&1)? tile_half_width : 0); x+tile_width<width; x+=tile_width)
    gdk_draw_pixbuf(widget->window,NULL,
                    pixbuf,src_x,src_y,
                    x,y,tile_width,tile_height,
                    GDK_RGB_DITHER_NONE,0,0);

結果:

gdk_draw_pixbuf を使用したアイソメトリック タイリング

ただし、カイロで同じように描くと、まったく同じではないことがわかりました。これは私がこれまでに持っているもので、機能していません:

cairo_t *cr = gdk_cairo_create(widget->window);
gdk_cairo_set_source_pixbuf(cr,pixbuf,src_x,src_y);
for(y=0,row=0; y+tile_height<height; y+=tile_half_height,++row)
  for(x=((row&1)? tile_half_width : 0); x+tile_width<width; x+=tile_width) {
    cairo_rectangle(cr,x,y,tile_width,tile_height);
    cairo_paint(cr);
  }
}
cairo_destroy(cr);

結果:

Cairo を使用した等尺性タイリング

Cairo は、通常のラスター イメージが描画されるため、単にイメージの描画を拒否します。私は何を間違っていますか、これはどのように解決されますか?

4

1 に答える 1