网上由用gtk2.0写的比较好的例子,但是我这里需要用3.0来写。
目前样子是出来了,但是显示的图片和原图片有差距(显示的效果编译有毛刺,且颜色略有差异,后面会贴图),求高手提供优化方法。
下面是我的程序:
代码: 全选
#include <gtk/gtk.h>
#include <gdk/gdk.h>
int main(int argc, char *argv[]){
GtkWidget *window = NULL;
GdkPixbuf *pixbuf = NULL;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_decorated(GTK_WINDOW(window), FALSE);
gtk_widget_set_app_paintable(window, TRUE);
gtk_widget_realize(window);
pixbuf = gdk_pixbuf_new_from_file("floatbg.png", NULL);
cairo_surface_t *img = cairo_image_surface_create(CAIRO_FORMAT_ARGB32,
gdk_pixbuf_get_width(pixbuf), gdk_pixbuf_get_height(pixbuf));
cairo_t *cr = cairo_create(img);
gdk_cairo_set_source_pixbuf(cr, pixbuf,0,0);
cairo_paint(cr);
cairo_region_t *mask = gdk_cairo_region_create_from_surface(img);
gtk_widget_shape_combine_region(window, mask);
cairo_region_destroy(mask);
cairo_surface_destroy(img);
g_object_unref(pixbuf);
gtk_widget_show_all(window);
gtk_main();
return TRUE;
}
gcc image.c -o image `pkg-config --cflags --libs gtk+-3.0` -export-dynamic
上一张图tt1是执行./image后的效果,下一张图tt2是原图效果(一个椭圆按钮,背景透明):
tt1:

tt2:
