Differenze tra le versioni di "Convertire il valore di un colore in RGBA"

Da Gambas-it.org - Wikipedia.
 
Riga 1: Riga 1:
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>&#091;[[#Note|Nota 1]]&#093;</sup>, possiamo adottare il calcolo contenuto nel seguente codice:
+
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>&#091;[[#Note|Nota 1]]&#093;</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>.
  '''Public''' Sub Main()
+
 
 +
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
 
    
 
    
<FONT Color=gray>' ''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>.''</font>
+
  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))
  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 "Rosso: "; <FONT Color=red>r</font>
  Print "Verde: "; <FONT Color=green>g</font>
+
  Print "Verde: "; <FONT Color=green>g</font>
  Print "Blu:  "; <FONT Color=blue>b</font>
+
  Print "Blu:  "; <FONT Color=blue>b</font>
  Print "Alfa:  "; a
+
  Print "Alfa:  "; a
 
    
 
    
  '''End'''
+
  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>
 
   
 
   
'''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
+
  st = Memory blu For Write
  Write #st, (colore \ CInt(2 ^ 8)) And &FF As Byte
+
  Write #st, colore And &FF As Byte
  st.Close
+
  st.Close
 
+
   
  st = Memory rosso For Write
+
  st = Memory verde For Write
  Write #st, (colore \ CInt(2 ^ 16)) And &FF As Byte
+
  Write #st, (colore \ CInt(2 ^ 8)) And &FF As Byte
  st.Close
+
  st.Close
 
+
   
  st = Memory alfa For Write
+
  st = Memory rosso For Write
  Write #st, (colore \ CInt(2 ^ 24)) And &FF As Byte
+
  Write #st, (colore \ CInt(2 ^ 16)) And &FF As Byte
  st.Close
+
  st.Close
 
+
   
  '''End'''
+
  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 !