Newsgroup: it.comp.lang.c
Titolo: Luminosita' di un colore

Ciao,
come si fa da un colore (DWORD) a sapere se e' scuro o se e' chiaro?
In pratica dovre trovare la luminosita' del colore.
Grazie Antonio


ICQ #34602650

 Grazie Antonio
Non so se sia quello che stai cercando, visto che
io sono molto ignorante in materia, pero` una volta
mi e` capitato di leggere quanto segue (io l'ho letto 
a proposito di conversioni da gif<->jpg):
1) The afine transformation in colour space :  [R G B] -> [Y Cb Cr]
---------------------------------------------------------------------
(It is defined in the CCIR Recommendation 601)
(R,G,B are 8-bit unsigned values)
        | Y  |     |  0.299       0.587       0.114 |   | R |     | 0 |
        | Cb |  =  |- 0.1687    - 0.3313      0.5   | * | G |   + |128|
        | Cr |     |  0.5       - 0.4187    - 0.0813|   | B |     |128|
The new value Y = 0.299*R + 0.587*G + 0.114*B  is called the luminance.
It is the value used by the monochrome monitors to represent an RGB colour.
Physiologically, it represents the intensity of an RGB colour perceived by
the eye.
You see that the formula for Y it's like a weighted-filter with different weights
for each spectral component: the eye is most sensitive to the Green component
then it follows the Red component and the last is the Blue component.
The values Cb =  - 0.1687*R - 0.3313*G + 0.5   *B + 128
           Cr =    0.5   *R - 0.4187*G - 0.0813*B + 128
are called the chromimance values and represent 2 coordinates in a system
which measures the nuance and saturation of the colour ([Approximately], these
values indicate how much blue and how much red is in that colour).
These 2 coordinates are called shortly the chrominance.
[Y,Cb,Cr] to [R,G,B] Conversion (The inverse of the previous transform)
--------------------------------
RGB can be computed directly from YCbCr ( 8-bit unsigned values) as follows:
R = Y                    + 1.402  *(Cr-128)
G = Y - 0.34414*(Cb-128) - 0.71414*(Cr-128)
B = Y + 1.772  *(Cb-128)
A note relating Y,Cb,Cr to the human visual system
---------------------------------------------------
The eye, particulary the retina, has as visual analyzers two kind of cells :
Cells for night view which perceive only nuances of gray ranging from intense
white to the darkest black and cells for the day view which perceive the color
nuance.
The first cells, given an RGB colour, detect a gray level similar to that given
by the luminance value.
The second cells, responsible for the perception of the colour nuance, are the
cells which detects a value related to that of the chrominance.
Per vedere tutto il file puoi provare su
http://www.wotsit.org
e cercare il formato dei file jpg
Marco Guidi

 In pratica dovre trovare la luminosita' del colore.
  Vorrei passare almeno tre ore a tediarti con la mia erudizione in
campo di computer graphic ma, purtroppo, per mangiare devo anche
lavorare. ;)
  In compenso, ti passo questo URL:
 
http://www.robo.mein.nagoya-u.ac.jp/~niimi/color-space/COL_24.htm
  La codifica HSI (Hue, Saturation and Intensity) si recupera facilmente
con le formulette indicate nella pagina sopra: per quel che ti serve,
immagino che il parametro /intensity/ faccia al tuo caso.
  Per come e` strutturata la codifica RGB, dati due colori, quello piu`
scuro e` quello che ha la media delle intensita` dei tre colori di base
piu` bassa. Parlando di grigi (R=G=B), il grigio piu` scuro e` il nero
(R=0, G=0, B=0), mentre il piu` chiaro e` il bianco (R=1, G=1, B=1,
valori normalizzati). E questo vale anche per gli altri colori.
  Nota, tuttavia, che questo e` solo un modello matematico: la
percezione umana potrebbe non corrispondervi.
	Alla prossima,
		Marco

GRAZIE per tutte le vostre indicazioni mi sono state veramente UTILI !
Antonio