Script di conversione rgb in hex

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
Linpassion
Linux 2.x
Linux 2.x
Messaggi: 336
Iscritto il: mar 30 ott 2012, 11:17
Slackware: 14.2
Desktop: xfce, fluxbox

Script di conversione rgb in hex

Messaggio da Linpassion »

So che non sono il primo a chiedere questo, e prima di scrivere ho visto in lungo e largo google e questo forum
Sostanzalmente vorrei fare uno script che mi permetta di gestire il wallpaer (pictures, gradiente e solid).
Il problema principale riguarda la parte del gradient, poic la funzione di color selct di zenity da l'output in rgb nel seguente modo

rgb(xxx,yyy,zzz).

ora io dovrei convertire i tre valori in esadecimale. L'ostacolo non è tanto con convertire in hex, ma estrarre i singoli valori:xx,yyy,zzz. La soluzione che ho trovato (usando sed e poi cut) è troppo l'unga, percio mi chiedevo se con le espressioni regolari, in un colpo solo posso estrarre i songoli valori. La concatenazionefinale non è un problema.

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Script di conversione rgb in hex

Messaggio da targzeta »

Intanto che posti quello che hai fatto, vedi se può andar bene questo:

Codice: Seleziona tutto

$> a=($(echo 'rgb(xxx,yyy,zzz)' | sed 's/.*(\([^)]*\))/\1/;s/,/ /g'))
$> set | grep '^a='
a=([0]="xxx" [1]="yyy" [2]="zzz")
Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
Linpassion
Linux 2.x
Linux 2.x
Messaggi: 336
Iscritto il: mar 30 ott 2012, 11:17
Slackware: 14.2
Desktop: xfce, fluxbox

Re: Script di conversione rgb in hex

Messaggio da Linpassion »

si il mio codice sarebbe questo

Codice: Seleziona tutto

function SETGRADIENT ()
{
  # Converione da rbg ad dec .. echo "o  base=16; nummero rgb" | bc ( esempio echo "obase=16; nummero 255"|bc  -> FF)
  # FROM - primo colore
  FROM=$(zenity --color-selection)
  # qui ci va la stringa che che con sed eleminavo le parentesi e la parola rgb
  # con cut ho selezionato i tre colori
  echo $FROM | cut -d',' -f1,
  echo $FROM | cut -d',' -f2
  echo $FROM | cut -d',' -f3
 
  # TO secondo colore   
  TO=$(zenity --color-selection --show-palette)
  # MODE tipo di gradiente
  #MODE=$(zenity --list --text="Gradient mode"  --radiolist --column "" --column "Mode" TRUE Horizontal FALSE Vertical FALSE Diagonal FALSE 	 Crossdiagonal  False Pipecross FALSE Elliptic FALSE Rectangle FALSE Piramid)
 # Applicazione delle impostazioni
 fbsetroot -gradient "$MODE" -from $FROM -to $TO
}



Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Script di conversione rgb in hex

Messaggio da targzeta »

Ora però manca sapere il formato di $FROM e $TO. Dal manuale mi pare di capire che tu debba passarli come '#XXXXXX' (esadecimale), però sicuro che non funziona anche con "rgb:<0,255>/<0,255>/<0,255>"? Purtroppo non ho fluxbox e non posso provare.

Nel primo caso:

Codice: Seleziona tutto

function rgbtohex ()
{
  hex=$(echo "obase=16;$1" | sed 's/rgb(\([^)]*\))/\1/;s/,/;/g'| bc | tr -d '\n')
  echo "#${hex}"
}
e quindi:

Codice: Seleziona tutto

FROM=$(rgbtohex $(zenity --color-selection))
Nel secondo caso, semplicemente:

Codice: Seleziona tutto

FROM=$(zenity --color-selection | tr '(,)' ':/\0')
Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Rispondi