Не могу найти членов GDK::InterpType в gtkmm

Я пытаюсь сделать 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’

1 ответ

Решение

Из стабильной документации 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, который предлагает приемлемое качество и скорость.

Другие вопросы по тегам