Autore Topic: Sommare due colori  (Letto 1718 volte)

Offline Allanon

  • Administrator
  • Synthetic Voodoo
  • *****
  • Post: 3498
  • Karma: +17/-4
    • Mostra profilo
    • http://www.a-mc.biz
Sommare due colori
« il: 08 Agosto 2011, 11:39:33 »
Ho un problemino che mi genera molti dubbi :)

Supponiamo che ho un background di un punto con un suo colore ARGB e voglio disegnare un'altro punto sopra sempre in formato ARGB, qual'è il giusto approccio?
I due canali alfa mi fanno confondere e non riesco a focalizzare bene quale dovrebbe essere il metodo giusto.
Purtroppo Hollywood quando effettua dei rendering su brush mi sovrascrive anche il canale alfa ma io vorrei mixarlo con quello del punto che desidero tracciare perciò devo farlo a manina :)

Io con questa roba (alpha channels) mi ci intrigo alla grande, ogni suggerimento è ben accetto :)
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline TheKaneB

  • Human Debugger
  • *****
  • Post: 5292
  • Karma: +20/-23
    • Mostra profilo
    • http://www.antoniobarba.org
Re: Sommare due colori
« Risposta #1 il: 08 Agosto 2011, 12:55:08 »
Sommare due pixel è uno di quegli argomenti che sembrano stupidi ma nascondono dietro tantissima teoria.
Quando lavoravo in 7th Sense, mi è capitato di fare dei colloqui per aspiranti game programmers incentrati esclusivamente su "cos'è un pixel" :-D

Per cominciare bisogna definire lo spazio colore, e nel tuo caso mi sembra il classico ARGB32 con 8 bit per canale.

In base all'effetto che vuoi ottenere, ci sono diverse operazioni di "blending" che puoi verificare tramite un programma di fotoritocco. Ecco un esempio classico di blending additivo:
Per semplicità immaginiamo i valori RGB scalati nel range 0.0 - 1.0

argb = risultato
a1r1g1b1 = canvas
a2r2g2b2 = brush

a = 1 - (1 - a1)*(1 - a2)
r = r1 * a1 / a + r2 * a2 * (1 - a1) / a
g = ...
b = ...

In questo caso i canali RGB vengono moltiplicati per una funzione dei due canali alpha, e poi sommati tra loro. Quella presentata è quini una funzione di trasformazione lineare dello spazio RGB, usando una funzione di Alpha come coefficiente di blending.
In base al coefficiente di blending puoi avere tanti effetti di blending additivo, che tendono a schiarire o scurire l'immagine.
Altre funzioni di blending sono quelle sottrattive, che esaltano la differenza tra i canali rendendosi utili ad esempio per effetti particolari (disegno in negativo, o altro). Poi ci sono quelle moltiplicative o di "burning" e non essendo lineari sono usate ad esempio per aumentare il contrasto di un'immagine (passando un pennello moltiplicativo lungo i bordi con un gradiente cromatico superiore ad una soglia stabilita).
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline Allanon

  • Administrator
  • Synthetic Voodoo
  • *****
  • Post: 3498
  • Karma: +17/-4
    • Mostra profilo
    • http://www.a-mc.biz
Re: Sommare due colori
« Risposta #2 il: 08 Agosto 2011, 13:23:56 »
@dsar
Niente giochi, devo solo costruire una cache composta da immagini elaborate fondendo altre piccole immagini

@TheKaneB
Tutto molto chiaro :-)
Adesso so in quale direzione guardare, farò un po di test ma dal momento che devo elaborare delle aree relativamente piccole e in fase di inizializzazione per costruire una cache non ho particolari problemi di performance.

Grazie della dritta   :D
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Tags: