30/06/14 20:39
Avrei un quesito per chi si fosse già trovato a dover risolvere questo "rompicapo". Vediamo se riesco a spiegarmi a dovere...
Sto tentando di realizzare un programmino di grafica nel quale mi piacerebbe inserire una funzione che impieghi una "penna" semitrasparente. Il programmino, realizzato in C (con sprazzi di C++) sfruttando le API di GDI/GDI+, è già a buon punto e funziona perfettamente con penne opache. Il problema sorge quando cerco di usare penne semitrasparenti.
Il tracciamento avviene memorizzando in una variabile statica la posizione del mouse in un dato momento, quindi usando la funzione membro LineTo() di un oggetto Pen per unire il punto memorizzato alla posizione corrente del cursore. Tutto bene, se non che con la penna semitrasparente ogni punto viene inevitabilmente tracciato due volte provocando uno scurimento del tratto che assume l'aspetto di una serie di "pallini" in corrispondenza dei punti occupati dal cursore nel tempo.
Un esempio? Poniamo che il primo punto sia in 5,3 e il secondo in 27,41. La penna traccia la riga semitrasparente da 5,3 a 27,41 esattamente come ci si aspetta, con un bel tratto uniforme. Nel frattempo, il mouse è stato spostato in 52,60. La penna, diligentemente traccia un secondo tratto che unisce 27,41 a 52,60. Ne consegue che nel punto 27,41 sono state tracciate due parti di linea, una che appartiene al primo passaggio e l'altra che appartiene al secondo. Effetto, le opacità parziali della penna si sommano in 27,41 dando un'opacità doppia solo in quel punto. Ovviamente la cosa si ripete ad ogni spostamento del mouse.
Ho pensato e provato alcune soluzioni per aggirare l'ostacolo, alcune decisamente cervellotiche, ma nessuna si è dimostrata efficace alla prova dei fatti. C'è qualche esperto, qui, che mi sa dare qualche dritta a prova di imbecille? (e che vuole farlo, ovviamente)
Sto tentando di realizzare un programmino di grafica nel quale mi piacerebbe inserire una funzione che impieghi una "penna" semitrasparente. Il programmino, realizzato in C (con sprazzi di C++) sfruttando le API di GDI/GDI+, è già a buon punto e funziona perfettamente con penne opache. Il problema sorge quando cerco di usare penne semitrasparenti.
Il tracciamento avviene memorizzando in una variabile statica la posizione del mouse in un dato momento, quindi usando la funzione membro LineTo() di un oggetto Pen per unire il punto memorizzato alla posizione corrente del cursore. Tutto bene, se non che con la penna semitrasparente ogni punto viene inevitabilmente tracciato due volte provocando uno scurimento del tratto che assume l'aspetto di una serie di "pallini" in corrispondenza dei punti occupati dal cursore nel tempo.
Un esempio? Poniamo che il primo punto sia in 5,3 e il secondo in 27,41. La penna traccia la riga semitrasparente da 5,3 a 27,41 esattamente come ci si aspetta, con un bel tratto uniforme. Nel frattempo, il mouse è stato spostato in 52,60. La penna, diligentemente traccia un secondo tratto che unisce 27,41 a 52,60. Ne consegue che nel punto 27,41 sono state tracciate due parti di linea, una che appartiene al primo passaggio e l'altra che appartiene al secondo. Effetto, le opacità parziali della penna si sommano in 27,41 dando un'opacità doppia solo in quel punto. Ovviamente la cosa si ripete ad ogni spostamento del mouse.
Ho pensato e provato alcune soluzioni per aggirare l'ostacolo, alcune decisamente cervellotiche, ma nessuna si è dimostrata efficace alla prova dei fatti. C'è qualche esperto, qui, che mi sa dare qualche dritta a prova di imbecille? (e che vuole farlo, ovviamente)