私は 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);
結果:
ただし、カイロで同じように描くと、まったく同じではないことがわかりました。これは私がこれまでに持っているもので、機能していません:
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 は、通常のラスター イメージが描画されるため、単にイメージの描画を拒否します。私は何を間違っていますか、これはどのように解決されますか?