在 gtkmm 中找不到 GDK::InterpType 成员



我正在尝试使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 提供合理的质量和速度。

相关内容

  • 没有找到相关文章

最新更新