在这一篇里,要讲述图像的处理。先是演示如何在 GTK+ 窗口中显示一幅图像,然后再制造一些特效。
图像的显示
在第一个例子里,显示了一幅图像。
#include<cairo.h>
#include<gtk/gtk.h>
cairo_surface_t *image;
staticgboolean
on_expose_event(GtkWidget *widget,
GdkEventExpose *event,
gpointer data)
{
cairo_t *cr;
cr = gdk_cairo_create (widget->window);
cairo_set_source_surface(cr, image,10,10);
cairo_paint(cr);
cairo_destroy(cr);
returnFALSE;
}
intmain(intargc, char *argv[])
{
GtkWidget *window;
image = cairo_image_surface_create_from_png("plaveckycastle.png");
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(window,"expose-event",
G_CALLBACK (on_expose_event), NULL);
g_signal_connect(window,"destroy",
G_CALLBACK (gtk_main_quit), NULL);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(window),320,250);
gtk_widget_set_app_paintable(window, TRUE);
gtk_widget_show_all(window);
gtk_main();
cairo_surface_destroy(image);
return0;
}
这个示例显示了一幅图片,其尺寸为 300x225,可从这里下载。这是斯洛伐克西部一个什么地方(Plavecke Podhradie)的中世纪城堡的废墟的一幅照片。
image = cairo_image_surface_create_from_png(
"plaveckycastle.png"
);
|
用一幅 png 图片来创建一份图像外观。出于效率的考虑,应在主函数中调用这个函数。
cairo_set_source_surface(cr, image, 10, 10);
|