Programmazione.it v6.2
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Chat Forum
Guida ad HTML5: l’elemento canvas, compositing (2/2)
Scritto da Pellegrino Principe il 30-07-2010 ore 10:13
Intel Software
Vediamo, ora, degli snippet di codice che illustrano praticamente le funzioni inerenti il compositing. Per quanto attiene alla proprietà globalAlpha, il codice seguente disegna sul canvas tre rettangoli di differente colore, e poi un quarto rettangolo, in esso orizzontalmente centrato, con un valore di trasparenza di 0.4 punti:
  1. if (context && "globalAlpha" in context)
  2. {
  3.     // disegno un rettangolo di un determinato blu
  4.     context.fillStyle = "#07E";
  5.     context.fillRect(0, 0, 200, 300);
  6.  
  7.     // disegno un rettangolo di un determinato verde
  8.     context.fillStyle = "#7D0";
  9.     context.fillRect(200, 0, 200, 300);
  10.  
  11.     // disegno un rettangolo di un determinato rosso
  12.     context.fillStyle = "#F50";
  13.     context.fillRect(400, 0, 200, 300);
  14.  
  15.     // applico un valore di trasparenza
  16.     context.globalAlpha = 0.4;
  17.  
  18.     // disegno una barra orizzontale sul giallino...
  19.     // con la trasparenza 
  20.     context.fillStyle = "#FE0";
  21.     context.fillRect(0, 100, 600, 100);
  22. }
L'immagine seguente mostra il risultato dell'esecuzione dello snippet:

4843276026_36003aafb7.jpg

Per quanto attiene, invece alla proprietà globalCompositeOperation, il codice seguente crea tanti canvas quanti sono i valori di proprietà accettati, disegnando in ciascuno un rettangolo di destinazione e un cerchio sorgente, e applicando una differente proprietà di compositing. Per far funzionare il codice, create nel body della pagina HTML un div con id pc e una classe CSS denominata multicanvas con le proprietà:
  1. border: solid 1px black
  2. background-color: #ddd
  1. var composite_operations =
  2. [
  3.     "source-over", "source-in", "source-out", "source-atop",
  4.     "destination-over", "destination-in", "destination-out", "destination-atop",
  5.     "lighter", "darker", "copy", "xor"
  6. ];
  7.  
  8. for (var ix = 0; ix < composite_operations.length; ix++)
  9. {
  10.     // creo l'oggetto canvas
  11.     var canvas = document.createElement("canvas");
  12.  
  13.     // imposto gli attributi
  14.     canvas.setAttribute("width", "100");
  15.     canvas.setAttribute("height", "100");
  16.     canvas.className = "multicanvas";
  17.  
  18.     var div = document.getElementById("pc");
  19.  
  20.     // lo appendo al div placeholder
  21.     div.appendChild(canvas);
  22.  
  23.     if (canvas && HTML5.Features.hasCanvas())
  24.     {
  25.         // ottengo il contesto 2D
  26.         var context = canvas.getContext("2d");
  27.  
  28.         // verifico se posso usare gli attributi di compositing
  29.         if (context && "globalCompositeOperation" in context)
  30.         {
  31.             // rettangolo destinazione
  32.             context.fillStyle = "#00F";
  33.             context.fillRect(1, 1, 60, 60);
  34.  
  35.             // imposto l'attributo di composizione
  36.             context.globalCompositeOperation = composite_operations[ix];
  37.  
  38.             // cerchio sorgente
  39.             context.fillStyle = "#0F0";
  40.             context.beginPath();
  41.             context.arc(50, 50, 30, 0, Math.PI * 2, false);
  42.             context.fill();
  43.  
  44.             // reset del compositing
  45.             context.globalCompositeOperation = "source-over";
  46.  
  47.             // testo
  48.             context.fillStyle = '#000';
  49.             context.font = "bold 10px Verdana";
  50.             context.fillText(composite_operations[ix], 1, 95);
  51.         }
  52.     }
  53. }
L'immagine seguente mostra il risultato dell'esecuzione dello snippet con Firefox 4 beta 2 dove, però, il valore darker non è ancora supportato.

4842659745_53024614d7.jpg

Precedente: Nuovi linguaggi di programmazione (2/2)
Successiva: DNS 2.0, alcune considerazioni (1/2)
Copyright Programmazione.it™ 1999-2009. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.963 secondi. Sito ottimizzato per Mozilla Firefox. Powered by Kyron.