Skip to content

gtk+ Печать изображения

19.07.2010

В этом посте хоелось бы рассказать как с помощью gtk+ printing api можно распечатать какое-либо изображение. Для работы с средствами печати в gtk+-2.0 существует достаточно удобное api, называемое gtk+ printing api. Далее мы рассмотрим как с помощью данного api отправить на печать изображение.

Для начала создадим функцию непосредственно вызова диалога печати, назовем ее print_pixbuf:

void   print_pixbuf(GtkWidget* widget, MainWin* mw)
{
    GtkPrintOperation *op;
    GtkPrintOperationResult res;
    GtkPrintSettings *settings;

    op = gtk_print_operation_new ();

    gtk_print_operation_set_n_pages (op, 1);
    gtk_print_operation_set_unit (op, GTK_UNIT_MM);
    g_signal_connect (op, "draw_page", G_CALLBACK (draw_page), mw);
    res = gtk_print_operation_run (op, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, mw, NULL);
}

В этой функции у нас присутствует один параметр, в данном случае это указатель на структуру MainWin, которая представляет из себя главное окно нашего приложения.

Далее как видно у нас в функции вызова диалога печати есть сигнал draw_page повешенный, на одноименную функцию.

Теперь сама функция draw_page:

static void draw_page (GtkPrintOperation * oper, GtkPrintContext * context, gint nr, gpointer user_data)
{
    MainWin* mw = (MainWin*)user_data; 
    GdkPixbuf* pixbuf = gdk_pixbuf_new_from_file("image path",NULL);
    
    pixbuf =  gdk_pixbuf_scale_simple (pixbuf,197, 210, GDK_INTERP_HYPER);
    
    cairo_t *cr = gtk_print_context_get_cairo_context (context);
    cairo_surface_t *image;
    
    gdk_cairo_set_source_pixbuf(cr, pixbuf, 0, 0);

    cairo_paint (cr);
    cairo_surface_destroy (image);
    g_object_unref (pixbuf);
}

Вот в принципе и все.

Передав в функцию draw_page путь нужного изображения в image path можно вызывать, функцию print_pixbuf в том месте где понадобится распечатывать изображение, откроется диалоговое окно печати:





Можно печатать 🙂

Если у вас появились вопросы или пожелания оставляйте в комментариях.

Реклама

From → coding, gtk+

Добавить комментарий

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: