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.
Avatar utente
Linpassion
Linux 2.0
Linux 2.0
Messaggi: 164
Iscritto il: mar ott 30, 2012 11:17
Slackware: 14.0
Kernel: 3.2.9-smp
Desktop: fluxbox

Script di conversione rgb in hex

Messaggioda Linpassion » mar set 06, 2016 21:49

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: 6469
Iscritto il: gio nov 03, 2005 14:05
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Script di conversione rgb in hex

Messaggioda targzeta » mar set 06, 2016 23:17

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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà 

Avatar utente
Linpassion
Linux 2.0
Linux 2.0
Messaggi: 164
Iscritto il: mar ott 30, 2012 11:17
Slackware: 14.0
Kernel: 3.2.9-smp
Desktop: fluxbox

Re: Script di conversione rgb in hex

Messaggioda Linpassion » mer set 07, 2016 8:55

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: 6469
Iscritto il: gio nov 03, 2005 14:05
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Script di conversione rgb in hex

Messaggioda targzeta » mer set 07, 2016 20:22

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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà