Paint it black
Forse vi sarete chiesti: "qual è il vantaggio di poter interagire con un oggetto tramite delle API?"
Dopotutto le operazioni viste finora (colorare dei pixel, invertire il sorriso) si sarebbero tranquillamente potute eseguire con una classica interfaccia "manuale" (esempio: "cliccare sul pixel, scegliere il colore da una tavolozza, etc").
Ottima e legittima domanda!
(Anche se, dite la verità: non avete provato un brivido di piacere nel vedere i puntini colorarsi obbedendo ad un vostro "comando"?)
Per rispondere consideriamo, per esempio, di voler cancellare un'immagine, dipingendola tutta di nero...
Qui sotto c'è il sorriso che vogliamo (crudelmente) cancellare. L'immagine espone un'interfaccia "manuale": quando clicchiamo su un pixel, questo diventa nera.
Avete voglia di provare ad annerire questa immagine?
Probabilmente penserai che si tratta di un'operazione piuttosto tediosa... e menomale che l'immagine ha solo 8x8 punti!
Come avremmo fatto con una tela 1024x768, o con la "Domenica" di Seurat (a proposito, secondo voi quanti puntini ha?)
Una delle cose interessanti di un comando API, o di un "pezzo di codice", è questa: dal momento che lo eseguiamo tramite un computer, approfittiamone anche per chiedergli di eseguirlo "ripetutamente".
Mi spiego meglio: ipotizziamo di scrivere un comando che agisca su un pixel selezionato, es esempio:
img.setPixel([255,0,0])
Ebbene, possiamo chiedere al computer di selezionare i pixel dell'immagine, uno per uno, e di applicare a ciascuno il comando che abbiamo scritto!
Nell'esercizio che trovi sotto, la console è dotata di un tasto, "Esegui su tutti", che fa esattamente questo.
Prova a sfruttare questa possibilità per colorare tutto lo smiley di nero (ricorda che ora i nostri pixel sono colorati, quindi il nero non è più uno '0', come all'inizio, ma è un colore in cui tutte le componenti cromatiche sono assenti).
Clicca Coding-mooc Polimi per accedere all'esercizio.
Nota tecnica
Il pulsante "Esegui su tutti" non è magia nera! Anche l'operazione di eseguire un certo comando su tutti i pixel può essere espressa tramite codice, e più avanti ti mostrerò come farlo...