GTK+中文社区(gtk.awaysoft.com)

 找回密码
 马上加入

QQ登录

只需一步,快速开始

查看: 5247|回复: 0

让图片随窗口大小变化进行缩放

[复制链接]

该用户从未签到

发表于 2011-5-8 17:31:57 | 显示全部楼层 |阅读模式
首先在窗口中添加一个drawingarea,并使“GDK_EXPOSURE_MASK”触发有效。
首加载图片到一个PIXBUF中,可以在程序初始做这件事。本例在窗口的“show”回调函数里做这事,代码如下:
  1. pixbuf_src = gdk_pixbuf_new_from_file ("gtk-logo-rgb.gif", NULL);    //将图片加载到pixbuf_src中
  2. //下面两句是获取图片的宽和高。
  3.     original_width = gdk_pixbuf_get_width(pixbuf_src);
  4.     original_height = gdk_pixbuf_get_height(pixbuf_src);
复制代码
接下来对图片进行缩放,在drawingarea的“expose”回调函数里做这件事。有两种方法。
第一种方法,用PIXBUF的缩放功能:
  1. pixbuf_src = gdk_pixbuf_scale_simple (pixbuf_src,
  2.                                           (widget->allocation.width),
  3.                                           (widget->allocation.height),
  4.                                           GDK_INTERP_BILINEAR);
  5.     gdk_pixbuf_render_to_drawable     (pixbuf_src,
  6.                                        widget->window,
  7.                                        widget->style->fg_gc[GTK_WIDGET_STATE (widget)],
  8.                                        0, 0,//src
  9.                                        0, 0,//dest
  10.                                        (widget->allocation.width),
  11.                                        (widget->allocation.height),
  12.                                        GDK_RGB_DITHER_NORMAL,
  13.                                        0, 0);
复制代码
第二种方法,用cairo的缩放功能。
  1. gdouble scale_x, scale_y;
  2.     cairo_t *cr;
  3.     scale_x = (widget->allocation.width) / (original_width*1.0);
  4.     scale_y = (widget->allocation.height) / (original_height*1.0);
  5.     cr = gdk_cairo_create (widget->window);
  6.     cairo_scale (cr, scale_x, scale_y);
  7.     gdk_cairo_set_source_pixbuf (cr, pixbuf_src, 0, 0);
  8.     cairo_paint (cr);
  9.     cairo_destroy (cr);
复制代码
*滑块验证:
您需要登录后才可以回帖 登录 | 马上加入

本版积分规则

申请友链|Archiver|小黑屋|手机版|GTK+中文社区 ( 粤ICP备13080851号 )

我要啦免费统计

GMT+8, 2024-4-27 13:03 , Processed in 0.187743 second(s), 8 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表