我正在尝试让Gtk::Image
窗口小部件显示文件中的图片,但是阻止窗口小部件扩展,所以我从Gdk::Pixbuf
加载它然后缩放图片。我使用的是Gdk::Pixbuf
而不是GdkPixBuf
,因为后者适用于常规指针,但Gtk::Image
需要Glib::RefPtr<Gdk::Pixbuf>
。 (只是提到所有这些,以防有更好的方法来实现我正在做的事情,我不知道。)
auto pixbuf = Gdk::Pixbuf::create_from_file("/home/raitis/Music/WRLD/Awake EP/cover.jpg");
auto scaled = pixbuf->scale_simple(48, 48, Gdk::InterpType::NEAREST);
image->set(scaled);
无论如何,问题是虽然我正在关注documentation for Gdk::Pixbuf
,但我的代码中的第2行会生成错误:
error: ‘NEAREST’ is not a member of ‘Gdk::InterpType’
auto scaled = pixbuf->scale_simple(48, 48, Gdk::InterpType::NEAREST);
^~~~~~~
尝试GDK_INTERP_NEAREST
也会导致错误。 :(
no known conversion for argument 3 from ‘GdkInterpType’ to ‘Gdk::InterpType’
答案 0 :(得分:1)
从稳定的gtkmm gdkmm文档中,Gdk::InterpType成员是:
INTERP_NEAREST
最近邻采样;这是最快和最低质量的 模式。按比例缩小时质量通常是不可接受的,但是当时可能没问题 扩大。
INTERP_TILES
这是对PostScript图像操作符的精确模拟 没有启用任何插值。
每个像素都呈现为一个微小的纯色平行四边形 其边缘用抗锯齿实现。它类似于最近的 邻居扩大,双线性减少。
<强> INTERP_BILINEAR 强>
最佳质量/速度平衡;默认情况下使用此模式。
双线性插值。对于放大,它相当于 对理想的双线性插值图像进行点采样。减少, 它相当于铺设小瓷砖并整合在一起 覆盖区域。
INTERP_HYPER
这是最慢和最高质量的重建功能。
它源于Wolberg的“数字图像”中的双曲滤波器 翘曲“,并且正式定义为双曲线滤波器采样 理想的双曲线滤波器插值图像(滤波器设计 对于1:1像素映射是幂等的。)
从Gdk::Pixbuf的文档中,在scale_simple
方法中,您会找到对插值类型的引用:
让src不受影响。 interp_type应为 Gdk :: INTERP_NEAREST if 你想要最大速度(但缩小 Gdk :: INTERP_NEAREST 是 通常难以置信的丑陋)。默认的interp_type应该是 Gdk :: INTERP_BILINEAR ,提供合理的质量和速度。