⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testpixbuf-save.c

📁 Linux下gtk图形界面开发的各种gtk控件调用方法示例
💻 C
📖 第 1 页 / 共 2 页
字号:
                        g_error_free (err);                } else {                        do_compare (pixbuf,                                    buffer_to_pixbuf (buffer, count, &err),                                    err);                }        }        else if (evt->keyval == 'p') {                if (pixbuf == NULL) {                        fprintf (stderr, "PIXBUF NULL\n");                        return;                }                if (!gdk_pixbuf_save (pixbuf, "foo.png", "png",                                       &err,                                      "tEXt::Software", "testpixbuf-save",                                      NULL)) {                        fprintf (stderr, "%s", err->message);                        g_error_free (err);                } else {                        do_compare(pixbuf,                                   gdk_pixbuf_new_from_file ("foo.png", &err),                                   err);                }        }        if (evt->keyval == 'i' && (evt->state & GDK_CONTROL_MASK)) {                /* save to callback */                if (pixbuf == NULL) {                        fprintf (stderr, "PIXBUF NULL\n");                        return;                }                loader = gdk_pixbuf_loader_new ();                if (!gdk_pixbuf_save_to_callback (pixbuf, save_to_loader, loader, "ico",                                                  &err,                                                  NULL)                    || !gdk_pixbuf_loader_close (loader, &err)) {                        fprintf (stderr, "%s", err->message);                        g_error_free (err);                } else {                        do_compare (pixbuf,                                    g_object_ref (gdk_pixbuf_loader_get_pixbuf (loader)),                                    err);                        g_object_unref (loader);                }        }        else if (evt->keyval == 'I') {                /* save to buffer */                if (!gdk_pixbuf_save_to_buffer (pixbuf, &buffer, &count, "ico",                                                &err,                                                NULL)) {                        fprintf (stderr, "%s", err->message);                        g_error_free (err);                } else {                        do_compare (pixbuf,                                    buffer_to_pixbuf (buffer, count, &err),                                    err);                }        }        else if (evt->keyval == 'i') {                if (pixbuf == NULL) {                        fprintf (stderr, "PIXBUF NULL\n");                        return;                }                if (!gdk_pixbuf_save (pixbuf, "foo.ico", "ico",                                       &err,                                      NULL)) {                        fprintf (stderr, "%s", err->message);                        g_error_free (err);                } else {                        do_compare(pixbuf,                                   gdk_pixbuf_new_from_file ("foo.ico", &err),                                   err);                }        }        if (evt->keyval == 'a') {                if (pixbuf == NULL) {                        fprintf (stderr, "PIXBUF NULL\n");                        return;                } else {                        GdkPixbuf *alpha_buf;                        alpha_buf = gdk_pixbuf_add_alpha (pixbuf,                                                          FALSE, 0, 0, 0);                        g_object_set_data_full (G_OBJECT (da),                                                "pixbuf", alpha_buf,                                                (GDestroyNotify) g_object_unref);                }        }}static intclose_app (GtkWidget *widget, gpointer data){        gtk_main_quit ();        return TRUE;}static intexpose_cb (GtkWidget *drawing_area, GdkEventExpose *evt, gpointer data){        GdkPixbuf *pixbuf;                 pixbuf = (GdkPixbuf *) g_object_get_data (G_OBJECT (drawing_area),						  "pixbuf");        if (gdk_pixbuf_get_has_alpha (pixbuf)) {                gdk_draw_rgb_32_image (drawing_area->window,                                       drawing_area->style->black_gc,                                       evt->area.x, evt->area.y,                                       evt->area.width,                                       evt->area.height,                                       GDK_RGB_DITHER_MAX,                                       gdk_pixbuf_get_pixels (pixbuf) +                                       (evt->area.y * gdk_pixbuf_get_rowstride (pixbuf)) +                                       (evt->area.x * gdk_pixbuf_get_n_channels (pixbuf)),                                       gdk_pixbuf_get_rowstride (pixbuf));        } else {                gdk_draw_rgb_image (drawing_area->window,                                     drawing_area->style->black_gc,                                     evt->area.x, evt->area.y,                                    evt->area.width,                                    evt->area.height,                                      GDK_RGB_DITHER_NORMAL,                                    gdk_pixbuf_get_pixels (pixbuf) +                                    (evt->area.y * gdk_pixbuf_get_rowstride (pixbuf)) +                                    (evt->area.x * gdk_pixbuf_get_n_channels (pixbuf)),                                    gdk_pixbuf_get_rowstride (pixbuf));        }        return FALSE;}static intconfigure_cb (GtkWidget *drawing_area, GdkEventConfigure *evt, gpointer data){        GdkPixbuf *pixbuf;                                   pixbuf = (GdkPixbuf *) g_object_get_data (G_OBJECT (drawing_area),   						  "pixbuf");            g_print ("X:%d Y:%d\n", evt->width, evt->height);        if (evt->width != gdk_pixbuf_get_width (pixbuf) || evt->height != gdk_pixbuf_get_height (pixbuf)) {                GdkWindow *root;                GdkPixbuf *new_pixbuf;                root = gdk_get_default_root_window ();                new_pixbuf = gdk_pixbuf_get_from_drawable (NULL, root, NULL,                                                           0, 0, 0, 0, evt->width, evt->height);                g_object_set_data_full (G_OBJECT (drawing_area), "pixbuf", new_pixbuf,                                        (GDestroyNotify) g_object_unref);        }        return FALSE;}intmain (int argc, char **argv){           GdkWindow     *root;        GtkWidget     *window;        GtkWidget     *vbox;        GtkWidget     *drawing_area;        GdkPixbuf     *pixbuf;               gtk_init (&argc, &argv);           gtk_widget_set_default_colormap (gdk_rgb_get_colormap ());        root = gdk_get_default_root_window ();        pixbuf = gdk_pixbuf_get_from_drawable (NULL, root, NULL,                                               0, 0, 0, 0, 150, 160);           window = gtk_window_new (GTK_WINDOW_TOPLEVEL);        g_signal_connect (window, "delete_event",			  G_CALLBACK (close_app), NULL);        g_signal_connect (window, "destroy",   			  G_CALLBACK (close_app), NULL);           vbox = gtk_vbox_new (FALSE, 0);        gtk_container_add (GTK_CONTAINER (window), vbox);             drawing_area = gtk_drawing_area_new ();        gtk_widget_set_size_request (GTK_WIDGET (drawing_area),                                     gdk_pixbuf_get_width (pixbuf),                                     gdk_pixbuf_get_height (pixbuf));        g_signal_connect (drawing_area, "expose_event",			  G_CALLBACK (expose_cb), NULL);        g_signal_connect (drawing_area, "configure_event",			  G_CALLBACK (configure_cb), NULL);        g_signal_connect (window, "key_press_event", 			  G_CALLBACK (keypress_check), drawing_area);            g_object_set_data_full (G_OBJECT (drawing_area), "pixbuf", pixbuf,                                (GDestroyNotify) g_object_unref);        gtk_box_pack_start (GTK_BOX (vbox), drawing_area, TRUE, TRUE, 0);           gtk_widget_show_all (window);        gtk_main ();        return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -