web-dev-qa-db-ja.com

背景設定-トリミングオプション

壁紙を設定するときは、tilezoomcenterscalefillまたはspanオプション。彼らはどういう意味ですか?

scaleオプションはzoomおよびspan?私の壁紙には違いが見えません。

4
seler

利用可能なさまざまなオプションの複雑さを理解するには、ソースコードを少し調べて、各オプションで何が起こるかを確認するだけの価値があります。これをできるだけ簡単に説明するように最善を尽くしますが、注意が必要です-少し数学を楽しむ必要があります!

ソースコードを取得しましょう:

 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; 
} 
 
  • まずオプションを見てみましょうSPAN

これは、ケースオプション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)は、エリア全体のデスクトップの背景色とブレンドされます。

  • オプションを見てみましょうSCALE

これは、ケースオプションG_DESKTOP_BACKGROUND_STYLE_SCALEDで説明されています

ソースコードを見るとわかるように、SPANと非常によく似ています。 SPANと同じアルゴリズムを使用して画像をスケーリングします。

結果の壁紙(pixbuf)は、ビューポート領域のデスクトップの背景色とブレンドされます。つまり、すべてのモニターを組み合わせた領域ではなく、各モニターの領域が個別にブレンドされます。

  • オプションを見てみましょうZoom

これは、ケースオプション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)は、ビューポート領域のデスクトップの背景色とブレンドされます。つまり、すべてのモニターを組み合わせた領域ではなく、各モニターの領域が個別にブレンドされます。

  • オプションを見てみましょうSTRETCH

これは、ケースオプションG_DESKTOP_BACKGROUND_STRETCHEDで説明されています

壁紙(pixbuf)は、領域に対して幅方向と高さ方向の両方に拡大されます-したがって、壁紙が壁紙の正確な寸法でない場合、歪みを得ることができます

結果の壁紙(pixbuf)は、ビューポート領域のデスクトップの背景色とブレンドされます。つまり、すべてのモニターを組み合わせた領域ではなく、各モニターの領域が個別にブレンドされます。

  • オプションを見てみましょうCENTER

これは、ケースオプションG_DESKTOP_BACKGROUND_CENTREDで説明されています

壁紙(pixbuf)は、実際には大きすぎて領域に収まらない場合、つまり幅が領域の幅に縮小され、高さが領域の高さに縮小される場合、サイズにクリップされます。

結果の壁紙(pixbuf)は、ビューポート領域のデスクトップの背景色とブレンドされます。つまり、すべてのモニターを組み合わせた領域ではなく、各モニターの領域が個別にブレンドされます。結果の画像は、モニターの全体領域の中央に描画されます。

  • オプションを見てみましょうTILE

これは、ケースオプションG_DESKTOP_BACKGROUND_WALLPAPERで説明されています

壁紙(pixbuf)も同様にCenterオプションとしてクリップされます。

結果の壁紙(pixbuf)は、ビューポート領域のデスクトップの背景色とブレンドされます。つまり、すべてのモニターを組み合わせた領域ではなく、各モニターの領域が個別にブレンドされます。結果の画像は、各画像で全体の領域を埋める1つのコーナーから繰り返しコピーされます。つまり、幅方向と高さ方向に並べられます。

6
fossfreedom

これは見るのが難しいでしょうが...

  • タイル-床のタイルのように画像をタイル化し、100x100のような本当に小さな画像を試します。 例については参照
  • ズーム-最大サイズがデスクトップの最大サイズになるように画像をズームします。たとえば、800x600デスクトップ上の200x100画像は800x400にズームされ、200pxの空きスペースが残ります。
  • 塗りつぶし-基本的にはモニターの幅に合わせて「スケール」します。高さを無視します。そのため、1000x1000の解像度と600x500の画像がある場合、画像は1200x1000にスケーリングされ、上下が少し切り取られます。
  • スパン-スケールに似ていますが、複数のモニターにまたがっています。したがって、2つの800x600と1600x600のイメージがある場合は、両方のモニターに「スパン」できます
  • 中央-単一のモニターの中央に画像を配置するサイズの小さい画像用です(大きい画像でも機能します)。
  • スケール-画像のサイズを変更します。デスクトップとまったく同じサイズにします。したがって、800x600のデスクトップは900x200の画像を正確に800x600に「拡大縮小」し、歪みを抑えます。

タイル以外のサンプルは提供できませんが、画像はモニターに大きく依存しています。深刻な小ささと悪いアスペクト比の画像を使用してテストすると、有効なオプションを簡単に確認できるはずです。

5
coteyr

複数の画像に関する私の観察から:

  • 中央:画像を元のサイズのままデスクトップの中央に配置します。
  • タイル:床のタイルのように画像をタイルし、画像の元のサイズを維持します。
  • 塗りつぶし:画像を画面に合わせて引き伸ばし(または縮小)しますが、縦横比を維持することは考慮しません。
  • ズーム:背景が完全に塗りつぶされるように、縦横比を保ちながら画像を拡大(または縮小)します。画像と画面の縦横比が異なる場合、フィットできない余分なバンドがカットされます(画像に応じて上下または左右)。
  • スケール:画像を引き伸ばし(または縮小)して、縦横比を保ちますが、画像が画面領域に完全に収まるようにします。画像と画面の比率が異なる場合、両側に空のバンドを許可します(画像に応じて、再び上下、左右)。
  • スパン:わからない。スケールのようです。 Coteyrにはそれがあり、Scaleと同じですが、複数の画面に対応していると思います。
3
Mamouth