我正在研究 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 只是拒绝绘制图像,因为将绘制正常的光栅图像。我做错了什么,如何解决?