我正在尝试使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);
无论如何,问题是,尽管我正在关注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’
来自稳定的GTKMM GDKMM文档,GDK :: Interptype成员是:
Interp_nearest
最近的邻居采样;这是质量最快,最低的 模式。降低时质量通常是不可接受的,但是当 扩大。
Interp_tiles
这是对Postscript图像操作员的准确模拟 没有任何插值。
每个像素被渲染为纯色的微小平行四边形, 边缘以抗质量实施。它类似于最近 邻居进行扩大,双线性减少。
Interp_bilinear
最佳质量/速度平衡;默认使用此模式。
双线性插值。为了扩大,它等效于 点采样理想的双线性间隔图像。为了减少 这相当于放下小瓷砖并在 覆盖区域。
interp_hyper
这是最慢,最高质量的重建功能。
它源自沃尔伯格的"数字图像"中的双曲线过滤器 翘曲",并正式定义为双曲线过滤器采样 理想的双曲线过滤器插值图像(设计过滤器 要对1:1像素映射进行掌握)。
以及从gdk :: pixbuf的文档中,在scale_simple
方法中,您可以找到对插值类型的引用:
使SRC不受影响。Interp_type应该是 gdk :: Interp_nearest 如果 您需要最大速度(但是当缩放 gdk :: Interp_nearest 是 通常丑陋)。默认Interp_type应该是 GDK :: Interp_bilinear 提供合理的质量和速度。