Differenze tra le versioni di "Convertire il valore di un colore in RGBA"
Da Gambas-it.org - Wikipedia.
(Una versione intermedia di uno stesso utente non è mostrata) | |||
Riga 1: | Riga 1: | ||
− | Per convertire | + | Per convertire nei singoli valori del formato standard RGBA il valore di un colore, contenente anche il canale ''alfa'' attinente alla trasparenza, come stabilito in Gambas <SUP>[[[#Note|Nota 1]]]</sup>, il valore del colore di formato RGBA va considerato secondo Gambas come segue: <FONT Color=black>alfa</font>, <FONT Color=red>rosso</font>, <FONT Color=green>verde</font>, <FONT Color=blue>blu</font>. |
− | + | ||
+ | Possiamo adottare la seguente funzione: | ||
+ | Private Sub ad_RGBA(Colore As Integer) As Byte[] | ||
+ | |||
+ | Dim r, g, b, a As Byte | ||
+ | |||
+ | r = Shr(Colore, 16) And &FF | ||
+ | g = Shr(Colore, 8) And &FF | ||
+ | b = Colore And &FF | ||
+ | a = Color.GetAlpha(Colore) | ||
+ | |||
+ | Return [r, g, b, a] | ||
+ | |||
+ | End | ||
+ | oppure eseguire il calcolo contenuto nel seguente codice: | ||
+ | Public Sub Main() | ||
Dim r, g, b, a As Byte | Dim r, g, b, a As Byte | ||
− | + | da_colore_a_rgba(&FF<FONT Color=red>00</font><FONT Color=green>FF</font><FONT Color=blue>00</font>&, VarPtr(r), VarPtr(g), VarPtr(b), VarPtr(a)) | |
− | |||
− | + | Print "Rosso: "; <FONT Color=red>r</font> | |
− | + | Print "Verde: "; <FONT Color=green>g</font> | |
− | + | Print "Blu: "; <FONT Color=blue>b</font> | |
− | + | Print "Alfa: "; a | |
− | + | End | |
+ | Private Function da_colore_a_rgba(colore As Long, rosso As Pointer, verde As Pointer, blu As Pointer, alfa As Pointer) <FONT Color=gray>' ''Passaggio dei parametri per "Indirizzo"''</font> | ||
− | |||
− | |||
Dim st As Stream | Dim st As Stream | ||
− | |||
− | |||
− | |||
− | |||
− | + | st = Memory blu For Write | |
− | + | Write #st, colore And &FF As Byte | |
− | + | st.Close | |
− | + | ||
− | + | st = Memory verde For Write | |
− | + | Write #st, (colore \ CInt(2 ^ 8)) And &FF As Byte | |
− | + | st.Close | |
− | + | ||
− | + | st = Memory rosso For Write | |
− | + | Write #st, (colore \ CInt(2 ^ 16)) And &FF As Byte | |
− | + | st.Close | |
− | + | ||
− | + | st = Memory alfa For Write | |
+ | Write #st, (colore \ CInt(2 ^ 24)) And &FF As Byte | ||
+ | st.Close | ||
+ | |||
+ | End | ||
Versione attuale delle 03:52, 9 mar 2023
Per convertire nei singoli valori del formato standard RGBA il valore di un colore, contenente anche il canale alfa attinente alla trasparenza, come stabilito in Gambas [Nota 1], il valore del colore di formato RGBA va considerato secondo Gambas come segue: alfa, rosso, verde, blu.
Possiamo adottare la seguente funzione:
Private Sub ad_RGBA(Colore As Integer) As Byte[] Dim r, g, b, a As Byte r = Shr(Colore, 16) And &FF g = Shr(Colore, 8) And &FF b = Colore And &FF a = Color.GetAlpha(Colore) Return [r, g, b, a] End
oppure eseguire il calcolo contenuto nel seguente codice:
Public Sub Main() Dim r, g, b, a As Byte da_colore_a_rgba(&FF00FF00&, VarPtr(r), VarPtr(g), VarPtr(b), VarPtr(a)) Print "Rosso: "; r Print "Verde: "; g Print "Blu: "; b Print "Alfa: "; a End Private Function da_colore_a_rgba(colore As Long, rosso As Pointer, verde As Pointer, blu As Pointer, alfa As Pointer) ' Passaggio dei parametri per "Indirizzo" Dim st As Stream st = Memory blu For Write Write #st, colore And &FF As Byte st.Close st = Memory verde For Write Write #st, (colore \ CInt(2 ^ 8)) And &FF As Byte st.Close st = Memory rosso For Write Write #st, (colore \ CInt(2 ^ 16)) And &FF As Byte st.Close st = Memory alfa For Write Write #st, (colore \ CInt(2 ^ 24)) And &FF As Byte st.Close End
Note
[1] ATTENZIONE ! In Gambas il colore di formato RGBA è così composto:
A R G B
e il valore del canale Alfa della piena opacità é uguale a zero, mentre il valore della piena trasparenza è 255 !