Configuração de fundo - opções de recorte

4

Ao definir um papel de parede, você pode escolher entre mosaico , zoom , centro , escala , preencher ou span opções. O que eles significam?

Como a opção escala é diferente de zoom e span ? Não consigo ver a diferença em nenhum dos meus papéis de parede.

    
por seler 08.12.2012 / 16:35

3 respostas

6

Para entender as complexidades das várias opções disponíveis, vale a pena apenas explorar o código-fonte para ver o que acontece com cada opção. Vou tentar o meu melhor para colocar isso é simplesmente possível, mas com a ressalva - você precisa aproveitar um pouco de matemática!

Vamos pegar o código-fonte:

 apt-get source gnome-desktop3
 cd gnome-desktop*
 cd libgnome-desktop

Agora, abra o seguinte módulo de origem com seu editor de texto favorito:

 gedit gnome-bg.c

Existem duas funções principais a serem examinadas:

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;
    }

e a função:

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;
    }

  • Vamos primeiro olhar para a opção SPAN

Isso é descrito pela opção case G_DESKTOP_BACKGROUND_STYLE_SPANNED

O papel de parede (pixbuf) é primeiro dimensionado para a área a ser preenchida (pixbuf_scale_to_fit), ou seja, pegue o papel de parede original e expanda sua largura e altura para corresponder à área.

Ele usa o seguinte algoritmo para expandir:

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 _ é a largura ou altura da dimensão do papel de parede, enquanto que max _ é a largura ou altura da dimensão da área

Algum algoritmo complicado, como você pode ver, mas basicamente ele tenta ver qual é a dimensão mínima que precisa ser expandida antes de dimensionar ambas as dimensões linearmente pelo mesmo fator que calculou.

Esta área é a área combinada do seu monitor ou monitores.

O papel de parede resultante (pixbuf) é então misturado com a cor de fundo da área de trabalho para toda a área.

  • Vamos ver a opção SCALE

Isso é descrito pela opção case G_DESKTOP_BACKGROUND_STYLE_SCALED

Como você pode ver no código-fonte, é muito parecido com SPAN . Ele usa o mesmo algoritmo para dimensionar a imagem como SPAN .

O papel de parede resultante (pixbuf) é então misturado com a cor de fundo da área de trabalho para a área da porta de exibição, ou seja, não a área combinada de todos os monitores, mas a área de cada monitor individualmente.

  • Vamos ver a opção Zoom

Isso é descrito pela opção case G_DESKTOP_BACKGROUND_ZOOM

O papel de parede (pixbuf) é primeiro dimensionado para a área a ser preenchida (pixbuf_scale_to_min), ou seja, pegue o papel de parede original e expanda sua largura e altura para corresponder à área.

Ele usa o seguinte algoritmo para expandir:

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 _ é a largura ou altura da dimensão do papel de parede, enquanto max _ é a largura ou altura da dimensão da área *

Observe a diferença sutil que as duas opções anteriores - ele calcula a dimensão máxima que precisa ser expandida antes de dimensionar ambas as dimensões linearmente pelo mesmo fator calculado.

O papel de parede resultante (pixbuf) é então misturado com a cor de fundo da área de trabalho para a área da porta de exibição, ou seja, não a área combinada de todos os monitores, mas a área de cada monitor individualmente.

  • Vamos ver a opção STRETCH

Isso é descrito pela opção case G_DESKTOP_BACKGROUND_STRETCHED

O papel de parede (pixbuf) é expandido tanto na largura como na altura em relação à área - assim você pode obter uma distorção se o papel de parede não tiver as dimensões exatas do papel de parede

O papel de parede resultante (pixbuf) é então misturado com a cor de fundo da área de trabalho para a área da porta de exibição, ou seja, não a área combinada de todos os monitores, mas a área de cada monitor individualmente.

  • Vamos ver a opção CENTER

Isso é descrito pela opção case G_DESKTOP_BACKGROUND_CENTRED

O papel de parede (pixbuf) é realmente recortado para tamanho se for muito grande para caber na área, ou seja, a largura é reduzida para a largura da área e a altura é reduzida para a altura da área.

O papel de parede resultante (pixbuf) é então misturado com a cor de fundo da área de trabalho para a área da porta de exibição, ou seja, não a área combinada de todos os monitores, mas a área de cada monitor individualmente. A imagem resultante é então desenhada para o centro da área total do monitor.

  • Vamos ver a opção TILE

Isso é descrito pela opção case G_DESKTOP_BACKGROUND_WALLPAPER

O papel de parede (pixbuf) é similarmente recortado como a opção Center .

O papel de parede resultante (pixbuf) é então misturado com a cor de fundo da área de trabalho para a área da porta de exibição, ou seja, não a área combinada de todos os monitores, mas a área de cada monitor individualmente. A imagem resultante é copiada repetidamente, iniciando em um canto, preenchendo a área total com cada imagem, ou seja, lado a lado em largura e em altura.

    
por fossfreedom 06.08.2013 / 01:02
5

Isso vai ser difícil de ver, mas ...

  • Mosaico - cria uma imagem, como mosaicos no chão, tenta imagens muito pequenas, como 100 x 100. veja os exemplos
  • Zoom - Aplica zoom em uma imagem para que a maior dimensão seja agora a maior dimensão da área de trabalho. Por exemplo, uma imagem de 200 x 100 em uma área de trabalho de 800 x 600 seria ampliada para 800 x 400, deixando 200 pixels de espaço vazio.
  • Fill - basicamente "dimensiona" a largura do seu monitor. Ignorando a altura. por isso, se tiver uma resolução de 1000x1000 e uma imagem de 600x500, a imagem será dimensionada para 1200x1000 e centrada, cortando um pouco a parte superior e inferior.
  • Span - é como o Scale, mas em vários monitores. Então, se você tem 2 800x600s e uma imagem de 1600x600, você pode "espalhá-lo" pelos dois monitores
  • Centro - é para imagens subdimensionadas (embora uma maior funcione) que colocam a imagem no centro de um único monitor.
  • Escala - "redimensiona" a imagem. Fazendo exatamente o mesmo tamanho que o seu desktop. Assim, uma área de trabalho de 800x600 "dimensionará" uma imagem de 900x200 para exatamente 800x600, e a distorção será prejudicada.

Lamentamos, mas não posso fornecer amostras além do bloco, mas as imagens dependem muito do seu monitor. Você deve poder ver facilmente as opções em vigor se usar uma imagem de ração de aspecto seriamente subdimensionada e ruim para testar.

    
por coteyr 08.12.2012 / 17:01
3

Das minhas observações sobre várias imagens:

  • Centro: coloca a imagem no centro da área de trabalho, mantendo o tamanho original.
  • Mosaico: cria a imagem, como mosaicos no chão, mantendo o tamanho original da imagem.
  • Fill: alonga (ou reduz) a imagem para corresponder à tela, mas não se preocupa em manter proporções.
  • Zoom: alonga (ou reduz) a imagem, mantendo proporções, para que o fundo seja completamente preenchido. Quando a imagem e a tela tiverem proporções diferentes, ela cortará as faixas extras que não podem ser ajustadas (superior e inferior ou esquerda e direita, dependendo da imagem).
  • Escala: também estica (ou reduz) a imagem, mantendo proporções, mas garante que a imagem se encaixe totalmente na área da tela. Quando a imagem e a tela tiverem proporções diferentes, permitirá faixas vazias nas laterais (novamente, superior e inferior ou esquerda e direita, dependendo da imagem).
  • Span: não tem ideia. Parece escala. Suponho que Coteyr esteja certo e faça o mesmo que Scale, mas para várias telas.
por Mamouth 03.10.2013 / 14:32