壁紙を設定するときは、tile、zoom、center、scale、fillまたはspanオプション。彼らはどういう意味ですか?
scaleオプションはzoomおよびspan?私の壁紙には違いが見えません。
利用可能なさまざまなオプションの複雑さを理解するには、ソースコードを少し調べて、各オプションで何が起こるかを確認するだけの価値があります。これをできるだけ簡単に説明するように最善を尽くしますが、注意が必要です-少し数学を楽しむ必要があります!
ソースコードを取得しましょう:
apt-get source gnome-desktop3
cd gnome-desktop*
cd libgnome-desktop
好みのテキストエディタで次のソースモジュールを開きます。
gedit gnome-bg.c
調べるべき2つの重要な機能があります。
get_scaled_pixbuf
スイッチ(配置){ 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:[.____。s_bu_f_____s_bu_f______s_bu_f________。 、幅、高さ、 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_clip_to_fit) break; }
および機能:
draw_image_area
スイッチ(bg-> placement){ case G_DESKTOP_BACKGROUND_STYLE_WALLPAPER: pixbuf_tile(scaled、dest); break; ケースG_DESKTOP_BACKGROUND_STYLE_ZOOM: ケースG_DESKTOP_BACKGROUND_STYLE_CENTERED: ケースG_DESKTOP_BACKGROUND_STYLE_STRETCHED: ケースG_DESKTOP_BACKGROUND_STYLE_SC。 > 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; }
これは、ケースオプション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 _は面積寸法の幅または高さ
ご覧のとおり、非常に複雑なアルゴリズムですが、基本的には、計算した同じ係数で両方の次元を線形にスケーリングする前に、拡張する必要がある最小次元を確認しようとします。
この領域は、1つまたは複数のモニターを組み合わせた領域です。
結果の壁紙(pixbuf)は、エリア全体のデスクトップの背景色とブレンドされます。
これは、ケースオプション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 _は面積寸法の幅または高さ*
前の2つのオプションとの微妙な違いに注意してください。計算した同じ係数で両方の次元を線形にスケーリングする前に、拡張する必要がある最大次元を計算します。
結果の壁紙(pixbuf)は、ビューポート領域のデスクトップの背景色とブレンドされます。つまり、すべてのモニターを組み合わせた領域ではなく、各モニターの領域が個別にブレンドされます。
これは、ケースオプションG_DESKTOP_BACKGROUND_STRETCHED
で説明されています
壁紙(pixbuf)は、領域に対して幅方向と高さ方向の両方に拡大されます-したがって、壁紙が壁紙の正確な寸法でない場合、歪みを得ることができます
結果の壁紙(pixbuf)は、ビューポート領域のデスクトップの背景色とブレンドされます。つまり、すべてのモニターを組み合わせた領域ではなく、各モニターの領域が個別にブレンドされます。
これは、ケースオプションG_DESKTOP_BACKGROUND_CENTRED
で説明されています
壁紙(pixbuf)は、実際には大きすぎて領域に収まらない場合、つまり幅が領域の幅に縮小され、高さが領域の高さに縮小される場合、サイズにクリップされます。
結果の壁紙(pixbuf)は、ビューポート領域のデスクトップの背景色とブレンドされます。つまり、すべてのモニターを組み合わせた領域ではなく、各モニターの領域が個別にブレンドされます。結果の画像は、モニターの全体領域の中央に描画されます。
これは、ケースオプションG_DESKTOP_BACKGROUND_WALLPAPER
で説明されています
壁紙(pixbuf)も同様にCenterオプションとしてクリップされます。
結果の壁紙(pixbuf)は、ビューポート領域のデスクトップの背景色とブレンドされます。つまり、すべてのモニターを組み合わせた領域ではなく、各モニターの領域が個別にブレンドされます。結果の画像は、各画像で全体の領域を埋める1つのコーナーから繰り返しコピーされます。つまり、幅方向と高さ方向に並べられます。
これは見るのが難しいでしょうが...
タイル以外のサンプルは提供できませんが、画像はモニターに大きく依存しています。深刻な小ささと悪いアスペクト比の画像を使用してテストすると、有効なオプションを簡単に確認できるはずです。
複数の画像に関する私の観察から: