几十行代码构造一个截屏软件

以前用GTK+,仅仅是用GTK+本身而已,事实上,使用GTK+只能完成一般的桌面应用程序,但是如果用上了GDK的话,哈哈,那又是一个全新的天地了。

网上中文GDK的资料比较少,又要自己琢磨了。 上网搜到了一个台湾人写的GDK的例子,只花了一点点代码就搞定了一个命令行下的截屏软件。真是太酷了。

-----

代码是:

void do_capture_screenshot (char *file, int sec)

{

gint x, y;

GdkScreen* cur_screen = NULL;

GdkWindow* window = NULL;

GdkPixbuf* pixbuf_screenshot = NULL;

GdkRectangle rect;

GdkRectangle screen_rect;

g_printf("ready to capture.....\r\n");

sleep(sec);

if (cur_screen == NULL)

cur_screen = gdk_screen_get_default ();

screen_rect.x = 0;

screen_rect.y = 0;

screen_rect.width = gdk_screen_get_width (cur_screen);

screen_rect.height = gdk_screen_get_height (cur_screen);

window = gdk_screen_get_root_window (cur_screen);

gdk_window_get_origin (window, &x, &y);

rect.x = x;

rect.y = y;

gdk_drawable_get_size (GDK_DRAWABLE (window), &rect.width,

&rect.height);

if (! gdk_rectangle_intersect (&rect, &screen_rect, &rect)) {

g_print("Capture failed!...\r\n");

return;

}

pixbuf_screenshot = gdk_pixbuf_get_from_drawable (NULL, window,

NULL,rect.x - x, rect.y - y, 0, 0,

rect.width, rect.height);

gdk_pixbuf_save (pixbuf_screenshot, file, "jpeg", NULL, "quality",

"100", NULL);

g_object_unref (pixbuf_screenshot);

g_print("Capture saved!!!\r\n");

return;

}

参数是文件名和时间(秒),刚好不到50行,将屏幕截下来存储为100%品质的JPG程序。相信一边看API一边看源码,一下子就会看懂的。

嗯,既然学习了GTK+,就要完全将其掌握!开始接触除GObject这个底层的东西以外的另一个GTK+的基础──GDK。

例子来自:http://zylix666.blogspot.com/2006/06/gtkgdk.html

<推广> 本站架设于 Linode 东京机房,同时使用 云梯 进行科学上网

» You can leave a comment.

4 Comments

  1. 不试试Qt?
    http://doc.trolltech.com/4.3/desktop-screenshot.html

  2. 呵呵,谢谢你的推荐。因为习惯于GNOME桌面,先入为主所以先学GTK,以后再学QT了。

  3. vfdff

    hBitmap = CreateCompatibleBitmap(hScrDC, rect.Width(), rect.Height());// 创建一个与屏幕设备描述表兼容的位图
    hOldBitmap =(HBITMAP)SelectObject(hMemDC, hBitmap);// 把新位图选到内存设备描述表中
    BitBlt(hMemDC, 0, 0, rect.Width(), rect.Height(),hScrDC,rect.left,rect.top, SRCCOPY);// 把屏幕设备描述表拷贝到内存设备描述表中
    hBitmap =(HBITMAP)SelectObject(hMemDC, hOldBitmap);//得到屏幕位图的句柄

Leave a Comment