Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Quando i numeri danno i numeri
Forum - C/C++ - Quando i numeri danno i numeri

Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 16:31
Venerdì, 10/11/2017
Buonasera ragazzi,
Questo titolo perché mi sto confondendo tra numeri e calcoli.
Magari potete aiutarmi a far luce su questo mio problema.

Partiamo dal principio.

Sto realizzando un tintometro home made.

Lo standard dei colori utilizzati è quello delle tabelle RAL.
Che sarebbe un codice universale per i colori.

Prendiamo come esempio:

Codice sorgente - presumibilmente Plain Text

  1. RAL 6018 (Yellow Green) | ( Verde amarillento )
  2. HEX: #48A43F
  3. RGB: ( 87 , 166,  57)
  4. CMYK: ( 0.47 , 0, 0.65, 0.34 )



La mia formula è la seguente:

Per RGB

R = R / 255
G = G / 255
B = B / 255

Il colore nero (k)  viene calcolato con i colori rosso, verde e blu.

K = 1 - max(R,G,B);
C = ( 1 - R - K ) / ( 1 - k )
M = ( 1 - G - K ) / ( 1 - K )
Y = ( 1 - B - K ) / ( 1 - K )

Ottengo così suddetti valori per il CMYK.

Per convertire da HEX a RGB ho fatto in questo modo.
16 e 8 bit.

Codice sorgente - presumibilmente C++

  1. QColor MainWindow::Converti(int hex) //vale 0x48A43F
  2. {
  3.     int r = ( hex >> 16) & 0xFF;
  4.     int g = ( hex >> 8 ) & 0xFF;
  5.     int b = hex & 0xFF;
  6.  
  7.     QColor c = QColor::fromRgb(r,g,b);
  8.     return c;
  9. }



In pratica come dovrebbe funzionare?
Dove sta il mio problema?

Il procedimento è lo stesso utilizzato dalle stampanti a colori.
Per somma dei colori primari (quindi per sottrazione di luce) si ottengono i colori finali.

I valori della scmposizione CMYK li possiamo prendere come rapporti in volume (ml, gocce, litri, Â…)
il problema è proprio questo.

Purtroppo ho cercato ovunque sulla rete, non sono riuscito ad ottenere nemmeno uno straccio
di informazioni sul rapporto / volume di colori o pigmenti da utilizzare per ottenere una composizione.

Siete mai stati in un ferramenta o colorificio?
Vi viene mostrata una mazzetta colori.
Il loro computer genera le giuste quantità in base ai litri che si desiderano ottenere.

ora io ho questi valori


CMYK: ( 0.47 , 0, 0.65, 0.34 )


Come potrei adattarli a millilitri o centilitri?

Ho ottenuto una sola informazione che può essere di aiuto.
trovata per sbaglio su un forum di modellismo.
Ora non ricordo nemmeno più quale.

Testo quotato


"ha una corrispondenza CMYK di 70 0 90 0
Otteniamo questo colore con 70 parti di Ciano per 90 di Giallo primario. In base a quanto colore dobbiamo fare, 7 gocce e 9 gocce, fino a 7 litri e 9 litri (Â… situazione esagerata, ma serve per rendere lÂ’idea)

Per modellismo, probabilmente 7ml e 9ml, presi con una siringa per essere precisi possono andare bene."




se li ho letto 70 = 7 gocce o magari 7ml.

Io ho come Ciano 0.47
Come arrivo a sapere quanti ml servono?

Che calcolo dovrei usare?


Ultima modifica effettuata da Thejuster il 10/11/2017 alle 16:33


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 449
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 17:38
Venerdì, 10/11/2017
Codice sorgente - presumibilmente C++

  1. QColor MainWindow::Converti(int hex) //vale 0x48A43F
  2.     {
  3.         int r = ( hex >> 16) & 0xFF;
  4.         int g = ( hex >> 8 ) & 0xFF;
  5.         int b = hex & 0xFF;
  6.      
  7.         QColor c = QColor::fromRgb(r,g,b);
  8.         return c;
  9.     }



La funziona converti non ti serve.
Cambia hex a unsigned int, e fai semplicemente
Codice sorgente - presumibilmente Plain Text

  1. QColor c = QColor::fromRgb(hex);



Per il resto trovo la descrizione parecchio confusa, non si capisce bene quale sia il tuo problema.
Riesco a interpretare solo in un modo la faccenda:
DATI DEL PROBLEMA: quantità di colore finale che serve (ad esempio 100 litri di colore Yellow Green)
Dalla scomposizione CMYK si capiscono le proporzioni dei colori che servono per farlo, ma questo lo dico solo dai vaghi ricordi che ho riguardo alla teoria dei colori che ho fatto alle medie, quindi boh.
Se K=0, siccome la somma delle componenti CMY è sempre 1, basta fare litri_totali*C per ottenere la quantità di ciano che ti serve e così via.
Solo che non ho idea di come funzioni la colorazione quando si aggiunge anche il nero, quindi devi un po' informarti da chi ne sa di colori. (C/C++ non sarebbe comunque stata la sezione più appropiata).

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 21:22
Venerdì, 10/11/2017
Ciao lumo si forse credo che non affida la sezione più adatta.

Grazie per la dritta.

Proverò a strappare qualche parola ad amici che hanno a che fare con queste cose.

Ho postato qui perché credevo che era un problema di calcolo.

Come fa quel tipo a dire 70 di ciano se a me max arriva a 0.999 etc?

Con quale proporzioni li calcolano?
Credo che sbagliavo io


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 449
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 18:53
Sabato, 11/11/2017
Quella è solo convenzione, tu giustamente usi la rappresentazione dove ogni componente è compresa tra 0 e 1, invece lì probabilmente si  usavano percentuali, quindi in quel caso 70 lo devi intendere come 70%, cioè 0.7

PM Quote