При установке обоев вы можете выбрать из плитки , зума , центра , масштаба , заливки или диапазон вариантов. Что они означают?
Чем опция масштабировать отличается от zoom и span ? Я не вижу разницы ни на одном из обоев.
Из моих наблюдений на нескольких изображениях:
Это будет сложно увидеть, но ...
Извините, я не могу предоставить образцы, кроме плитки, но изображения сильно зависят от вашего монитора. Вы должны иметь возможность легко увидеть действующие параметры, если для тестирования вы используете изображение с очень низким размером и плохим соотношением сторон.
Чтобы понять тонкости различных доступных опций, стоит просто немного покопаться в исходном коде, чтобы увидеть, что происходит с каждой опцией. Я постараюсь изо всех сил выразить это просто, насколько это возможно, но с оговоркой - вам нужно немного математики!
Давайте возьмем исходный код:
apt-get source gnome-desktop3
cd gnome-desktop*
cd libgnome-desktop
Теперь откройте следующий исходный модуль с вашим любимым текстовым редактором:
gedit gnome-bg.c
Есть две ключевые функции для изучения:
get_scaled_pixbuf
switch (placement) { case G_DESKTOP_BACKGROUND_STYLE_SPANNED: new = pixbuf_scale_to_fit (pixbuf, width, height); break; case G_DESKTOP_BACKGROUND_STYLE_ZOOM: new = pixbuf_scale_to_min (pixbuf, width, height); break; case G_DESKTOP_BACKGROUND_STYLE_STRETCHED: new = gdk_pixbuf_scale_simple (pixbuf, width, height, GDK_INTERP_BILINEAR); break; case G_DESKTOP_BACKGROUND_STYLE_SCALED: new = pixbuf_scale_to_fit (pixbuf, width, height); break; case G_DESKTOP_BACKGROUND_STYLE_CENTERED: case G_DESKTOP_BACKGROUND_STYLE_WALLPAPER: default: new = pixbuf_clip_to_fit (pixbuf, width, height); break; }[ 1136] и функции:
draw_image_area
switch (bg->placement) { case G_DESKTOP_BACKGROUND_STYLE_WALLPAPER: pixbuf_tile (scaled, dest); break; case G_DESKTOP_BACKGROUND_STYLE_ZOOM: case G_DESKTOP_BACKGROUND_STYLE_CENTERED: case G_DESKTOP_BACKGROUND_STYLE_STRETCHED: case G_DESKTOP_BACKGROUND_STYLE_SCALED: pixbuf_blend (scaled, dest, 0, 0, w, h, x + area->x, y + area->y, 1.0); break; case G_DESKTOP_BACKGROUND_STYLE_SPANNED: pixbuf_blend (scaled, dest, 0, 0, w, h, x, y, 1.0); break; default: g_assert_not_reached (); break; }
Это описывается опцией case G_DESKTOP_BACKGROUND_STYLE_SPANNED
Обои (pixbuf) сначала масштабируются до области, которую нужно заполнить (pixbuf_scale_to_fit), т.е. берут исходные обои и увеличивают их ширину и высоту, чтобы соответствовать площадь.
Для расширения используется следующий алгоритм:
factor = MIN (max_width / src_width, max_height / src_height); new_width = floor (src_width * factor + 0.5); new_height = floor (src_height * factor + 0.5);
src_ - ширина или высота размера обоев, тогда как max_ - размер области ширина или высота
Довольно сложный алгоритм, как вы можете видеть, но в основном он пытается выяснить, какое минимальное измерение необходимо расширить, прежде чем линейно масштабировать оба измерения на тот же коэффициент, который он рассчитал.
Эта область является объединенной областью вашего монитора или мониторов.
Полученные обои (pixbuf) затем смешиваются с цветом фона рабочего стола для всей области.
Это описывается опцией case G_DESKTOP_BACKGROUND_STYLE_SCALED
Как вы можете видеть в источнике код, он очень похож на SPAN . Он использует тот же алгоритм для масштабирования изображения, что и SPAN .
Полученные обои (pixbuf) затем смешиваются с цветом фона рабочего стола для области портов просмотра, то есть не объединенной области всех мониторов, а области каждого монитора в отдельности.
Это описывается опцией случая G_DESKTOP_BACKGROUND_ZOOM
Обои (pixbuf) являются первыми масштабируется до области, которую нужно заполнить (pixbuf_scale_to_min), т.е. возьмите оригинальные обои и увеличьте их ширину и высоту, чтобы соответствовать области.
Для расширения используется следующий алгоритм:
factor = MAX (min_width / src_width, min_height / src_height); new_width = floor (src_width * factor + 0.5); new_height = floor (src_height * factor + 0.5);
src_ - ширина или высота размера обоев, тогда как max_ - размер области ширина или высота *
Обратите внимание на небольшую разницу, чем в двух предыдущих вариантах - он вычисляет максимальный размер, который необходимо расширить, прежде чем линейно масштабировать оба размера на тот же коэффициент, который он рассчитал.
Полученные обои (pixbuf) затем смешиваются с цветом фона рабочего стола для области порта просмотра, то есть не объединенной области всех мониторов, а области каждого монитора в отдельности.
Это описывается опцией случая G_DESKTOP_BACKGROUND_STRETCHED
Обои (pixbuf) раскрываются как по ширине, так и по высоте к области - таким образом, вы можете получить искажение, если ваши обои не соответствуют точным размерам обоев
Полученные обои (pixbuf) затем смешиваются с цветом фона рабочего стола для площадь порта просмотра, т.е. не объединенная область всех мониторов, а область каждого монитора в отдельности.
Это описывается опцией случая G_DESKTOP_BACKGROUND_CENTRED
Обои (pixbuf) на самом деле обрезается до размера, если он слишком велик, чтобы соответствовать области, то есть ширина уменьшается до ширины области, а высота уменьшается до высоты области.
Полученные обои (pixbuf) затем смешиваются с цветом фона рабочего стола для области порта просмотра, то есть не объединенной области всех мониторов, а области каждого монитора в отдельности. Полученное изображение затем выводится в центр общей области монитора.
Это описывается опцией случая G_DESKTOP_BACKGROUND_WALLPAPER
Обои (pixbuf) аналогичны обрезается как опция Center .
Полученные обои (pixbuf) затем смешиваются с цветом фона рабочего стола для области порта просмотра, то есть не объединенной области всех мониторов, а области каждого монитора в отдельности. Полученное изображение копируется многократно, начиная с одного угла, заполняя общую область каждым изображением, то есть по ширине и по высоте.