Я пытаюсь сделать 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 который предлагает разумное качество и скорость.
Других решений пока нет …