Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
Pochopenie konceptov
* odtieň (h): Predstavuje dominantnú farbu ako uhol na farebnom kolieskach (0-360 stupňov). 0 je červená, 120 je zelená, 240 je modrá a tak ďalej.
* saturácia: Predstavuje množstvo farby. 0% je šedá (bez farby), 100% je úplne nasýtená.
* Hodnota/jas (v) alebo ľahkosť (l): Predstavuje intenzitu farby. Hodnota je od 0 do 1 (alebo 0% do 100%), kde 0 je čierna a 1 je plný jas. Ľahkosť prechádza od 0 do 1 (alebo 0% do 100%), kde 0 je čierna, 0,5 je čistá farba a 1 je biela.
* rgb (červená, zelená, modrá): Predstavuje farbu ako kombináciu červených, zelených a modrých komponentov. Každá zložka sa zvyčajne pohybuje od 0 do 255 (alebo 0,0 až 1,0 v normalizovanej forme).
Algoritmus (HSB/HSV až RGB)
Tu je všeobecný proces. Použijem spoločný zápis:
* `H`:Hue (0-360 stupňov)
* `S`:saturácia (0,0-1,0)
* `V`:Hodnota (0,0-1.0)
* `R`,` G`, `B`:červená, zelená, modrá (0,0-1,0)
`` `Python
def hsv_to_rgb (h, s, v):
"" "
Prevedie hodnotu farby HSV na RGB.
ARG:
H:odtieň (0-360 stupňov)
S:saturácia (0,0-1,0)
V:Hodnota (0,0-1,0)
Návraty:
Tuple (R, G, B) predstavujúce farbu RGB (hodnoty medzi 0,0 a 1,0).
"" "
Ak s ==0,0:
# Achromatic (šedá)
návrat (v, v, v)
H =H % 360,0 # Zaistite, aby bol odtieň v rozsahu [0, 360)
h /=60,0 # sektor 0 až 5
i =int (h)
f =h - i # frakčná časť h
p =v * (1 - s)
q =v * (1 - s * f)
t =v * (1 - s * (1 - f))
Ak i ==0:
r, g, b =v, t, p
Elif I ==1:
r, g, b =q, v, p
Elif I ==2:
r, g, b =p, v, t
Elif I ==3:
r, g, b =p, q, v
Elif I ==4:
r, g, b =t, p, v
inak:# i ==5
r, g, b =v, p, q
návrat (r, g, b)
`` `
Vysvetlenie:
1. rukoväť Grayscale: Ak je saturácia 0, je to odtieň šedej. Všetky hodnoty RGB sa rovnajú hodnote (jas).
2. Normalizujte odtieň:
* Uistite sa, že odtieň je v rozmedzí 0-360 stupňov pomocou operátora modulu (`%"). Zvládne prípady, keď by odtieň mohol byť v dôsledku výpočtov mierne mimo rozsahu.
* Rozdeľte odtieň 60. Toto rozdeľuje farebné koleso do šiestich sektorov, z ktorých každé 60 stupňov široké. „H` teraz predstavuje pozíciu v sektore (0 až 5).
3. Vypočítajte stredne pokročilé hodnoty:
* `i =int (h)`:Celočučná časť `h` určuje tento sektor.
* `f =H - I`:Frakčná časť` H` je pozícia v tomto sektore (0 až 1).
* `p =v * (1 - s)`:Táto hodnota sa používa, keď je farebná zložka najnižšia v súčasnom sektore.
* `q =v * (1 - s * f)`:Táto hodnota sa používa, keď sa v súčasnom sektore zvyšuje farebná zložka.
* `t =v * (1 - s * (1 - f))`:Táto hodnota sa používa, keď farebná zložka klesá v súčasnom sektore.
4. Určte RGB na základe sektora: Séria výkazov „if/elif/else` vyberie správne hodnoty RGB na základe toho, na základe ktorých odvetvie patrí. Premenné `r`,` g` a `b` sú priradené na základe` v`, `p`,` q` a `t`.
Príklad použitia (python):
`` `Python
h =120,0 # zelená
S =1,0
V =0,75
r, g, b =hsv_to_rgb (h, s, v)
print (f "hsv ({h}, {s}, {v}) -> rgb ({r}, {g}, {b})")
#Convert do rozsahu 0-255
r_255 =int (r * 255)
g_255 =int (g * 255)
B_255 =int (b * 255)
Print (f "rgb (0-255):({r_255}, {g_255}, {b_255})")
`` `
HSL až RGB
Konverzia HSL až RGB je mierne odlišná, predovšetkým v tom, ako sa rieši komponent ľahkosti. Tu je kód Python:
`` `Python
def hsl_to_rgb (h, s, l):
"" "Prevádza HSL na RGB.
ARG:
H:odtieň (0-360 stupňov)
S:saturácia (0,0-1,0)
L:Ľahkosť (0,0-1,0)
Návraty:
Tuple (R, G, B) predstavujúce farbu RGB (hodnoty medzi 0,0 a 1,0).
"" "
Ak s ==0,0:
r =g =b =l # achromatické
inak:
H =H % 360,0
H /=60,0
a =l * (1 - abs (2 * l - 1) * s)
x =a * (1 - abs (h % 2 - 1))
m =l - a / 2
Ak 0 <=h <1:
r, g, b =a, x, 0
Elif 1 <=H <2:
r, g, b =x, a, 0
Elif 2 <=H <3:
r, g, b =0, a, x
Elif 3 <=H <4:
r, g, b =0, x, a
Elif 4 <=H <5:
r, g, b =x, 0, a
Elif 5 <=H <6:
r, g, b =a, 0, x
inak:
r =g =b =0 # by sa nemalo stať, ale len pre prípad
r +=m
g +=m
B +=m
návrat r, g, b
`` `
Kľúčové rozdiely v konverzii HSL:
* ľahkosť a chroma: HSL používa ľahkosť, ktorá predstavuje vnímaný jas. Výpočet zahŕňa nájdenie * chroma * (miera intenzity farby) a potom upravenie hodnôt RGB na základe odtieňa a chroma.
* stredná šedá: V HSL je L =0,5 „čistá“ farba pri maximálnej saturácii. L =0 je čierna a l =1 je biela. V HSV je V =1 najjasnejšia farba môže byť.
* zložitejšia matematika: Výpočty v HSL sa vo všeobecnosti zapoja viac z dôvodu koncepcie ľahkosti.
Dôležité úvahy:
* normalizácia: Pred použitím funkcií sa uistite, že vaše hodnoty H, S a V/L sú v očakávaných rozsahoch (0-360 pre H, 0-1 pre S a V/L). Príklady, ktoré sa uvádza, sa používajú medzi 0 a 1, ale je dôležité skontrolovať, či je to správny rozsah pre váš prípad použitia.
* celé číslo vs. s pohyblivou úrovňou: Príklady kódu vracajú hodnoty RGB ako čísla s pohyblivou rádovou čiarkou medzi 0,0 a 1,0. Ak potrebujete celočíselné hodnoty (0-255), vynásobte každú komponent 255 a odovzdajte celé číslo:`r_int =int (r * 255)`
* Knižnice: Mnoho programovacích jazykov má vstavané knižnice konverzie farieb, ktoré dokážu tieto konverzie zvládnuť efektívnejšie a potenciálne s lepšou presnosťou. Napríklad v Pythone môžete použiť modul `Colorsys`. V JavaScripte môžete použiť farebnú knižnicu ako `chroma.js`.
* Farebné profily: Ak pracujete s farebne kritickými aplikáciami (napr. Profesionálna grafika), uvedomte si farebné profily (napríklad SRGB alebo Adobe RGB). Konverzie medzi farebnými priestormi môžu ovplyvniť vzhľad farieb.
* Pochopenie farebných modelov: Je nevyhnutné pochopiť rozdiely medzi HSV a HSL. HSV je pre niektorých intuitívnejší, zatiaľ čo HSL sa často považuje za vnímavejšie rovnomernejšie (čo znamená, že rovnaké zmeny v L vedú k konzistentnejším zmenám v vnímanom jasu).
Pochopením algoritmov a použitím príkladov poskytnutých kódov môžete vo svojich programoch prevádzať Hue na RGB (HSV na RGB alebo HSL na RGB). Nezabudnite zvážiť konkrétne rozsahy vašich hodnôt H, S a V/L a podľa toho upraviť kód. Ak máte nejaké konkrétne problémy alebo chcete prispôsobiť to inému programovaciemu jazyku, dajte mi vedieť!