Entender a tela de canvas

Veremos como é a tela de um canvas, formada por um eixo de coordenadas que podemos utilizar para posicionar todos os desenhos que quisermos colocar no canvas.

Por Miguel Angel Alvarez - Tradução de JML


Publicado em: 20/4/10
Valorize este artigo:
Seguimos dando nossos primeiros passos no elemento canvas do HTML 5. Lembramos que no anterior artigo vimos um primeiro exemplo de desenho em um canvas, por isso, já temos uma idéia das partes que integram o processo para fazer um desenho no canvas:

  • Colocar a etiqueta CANVAS no corpo da página
  • Desenhar no canvas utilizando um script em Javascript
Neste artigo vamos explicar as características de nossa tela e as coordenadas com as quais podemos nos mover e realizar desenho.

Eixo de coordenadas do canvas

Para posicionar elementos no canvas temos que ter em conta seu eixo de coordenadas em duas dimensões, que começa na esquina superior esquerda da tela.

A tela produzida por canvas terá umas dimensões indicadas com os atributos width e height na etiqueta CANVAS. Portanto, a esquina superior esquerda será o ponto (0,0) e a esquina inferior direita o ponto definido por (width-1,height-1), ou seja, o ponto máximo de coordenadas marcado por sua largura e altura.

Nota: Indicamos que o ponto da esquina inferior direita é (width-1,height-1) porque as coordenadas começam em (0,0), logo, a coordenada final em largura e altura será 1 menos o tamanho máximo de width e height definido na etiqueta CANVAS. Por exemplo, se a largura for 50 e a altura for 100, então as coordenadas serão desde (0,0) até (49,99).

Podemos ver o seguinte diagrama para ter uma idéia exata das dimensões e coordenadas em um canvas.


Qualquer ponto do canvas se calcula com a coordenada (x,y), sendo que a x cresce segundo os pixels à direita e a y com os pixels para baixo.

Para desenhar qualquer tipo de forma no canvas necessitaremos posicioná-la com respeito às coordenadas que acabamos de ver. No exemplo do artigo anterior, vimos que para desenhar um retângulo necessitamos vários valores:

contexto.fillRect(10, 10, 100, 70);

Os dois primeiros parâmetros eram as coordenadas x e y da esquina superior esquerda do retângulo. Os dois últimos parâmetros são os valores de largura e altura do mesmo.

Porém, há outras formas que se podem desenhar em um canvas que requerem o uso de métodos um pouco mais elaborados que o desenho de um retângulo, como veremos mais adiante.

Segundo exemplo de trabalho com canvas

Para continuar nos familiarizando com o elemento canvas e o procedimento de desenho mediante Javascript vamos ver um segundo exemplo, também simples.

Vimos que parte do código Javascript necessário era para realizar as comprovações pertinentes a fim de nos assegurarmos que o navegador é compatível com canvas quando queremos extrair o contexto do canvas antes de começar a desenhar. Neste exemplo, realizaremos uma função para resumir estas tarefas que poderemos utilizar ao longo deste manual.

//Recebe um identificador do elemento canvas e carrega o canvas
//Devolve o contexto do canvas ou FALSE se não pode conseguir
function carregaContextoCanvas(idCanvas){
   var elemento = document.getElementById(idCanvas);
   if(elemento && elemento.getContext){
      var contexto = elemento.getContext('2d');
      if(contexto){
         return contexto;
      }
   }
   return FALSE;
}

Poderemos invocar esta função e avaliar seu resultado para saber se se obteve ou não o contexto do canvas.

var contexto = carregaContextoCanvas('meucanvas');
if(contexto){
   //Tenho o contexto, então desenho sobre o canvas
}

Neste exemplo, vamos desenhar um par de retângulos, um azul e outro amarelo. Já vimos no anterior exemplo como se faziam formas retangulares e também aprendemos a mudar a cor da forma. Para mostrar outra das possibilidades do canvas vamos mostrar como fazer uma cor semi-transparente.

//mudo a cor de desenho a azul
contexto.fillStyle = '#6666ff';
//desenho um retângulo azul
contexto.fillRect(10,10,50,50);
//mudo a cor a amarelo com um pouco de transparência
contexto.fillStyle = 'rgba(255,255,0,0.7)';
//pinto um retângulo amarelo semitransparente
contexto.fillRect(35,35,50,50);

Se observarmos, quando se mudou a cor ao amarelo, se especificou a cor com RGBA, isto significa que estamos indicando também o canal Alpha, que indica o grau de transparência desde 0 (totalmente transparente) a 1 (totalmente opaco).

Esclarecemos de qualquer forma que todas estas funções de desenho serão explicadas detalhadamente mais adiante.

O código completo deste segundo exemplo se pode ver a seguir:

<html>
<head>
   <title>Canvas segundo exemplo</title>

<script>
//Recebe um identificador do elemento canvas e carrega o canvas
//Devolve o contexto do canvas ou FALSE se não pode conseguir
function cargaContextoCanvas(idCanvas){
   var elemento = document.getElementById(idCanvas);
   if(elemento && elemento.getContext){
      var contexto = elemento.getContext('2d');
      if(contexto){
         return contexto;
      }
   }
   return FALSE;
}

window.onload = function(){
   //Recebemos o elemento canvas
   var contexto = cargaContextoCanvas('meucanvas');
   if(contexto){
//Se tenho o contexto
//mudo a cor de desenho a azul
contexto.fillStyle = '#6666ff';
//desenho um retângulo azul
contexto.fillRect(10,10,50,50);
//mudo a cor a amarelo com um pouco de transparência
contexto.fillStyle = 'rgba(255,255,0,0.7)';
//pinto um retângulo amarelo semitransparente
contexto.fillRect(35,35,50,50);
   }
}

</script>

</head>

<body>

<canvas id="meucanvas" width="100" height="100">
Seu navegador não suporta canvas.
</canvas>

</body>
</html>

O exemplo pode ser visto em funcionamento em uma página à parte, porém tenha em conta que é preciso dispor de compatibilidade com canvas em seu navegador.






Usuários :    login / registro
Manuais relacionados
Categorias relacionadas
O autor

Home | Sobre nós | Copyright | Anuncie | Entrar em contato