hex2grayscale
takeshin - 17-11-2006 07:15
hex2grayscale
witam!
potrzebuję zamienić kolor (docelowo funkcja w javascript) w postaci HEX np. na jego odpowiednik w skali szarości przykład: #22AE93=>#9a9a9a
jak powinien wyglądać algorytm zamiany?
rozumiem, że wszystkie trzy składowe trzeba wyrównać, ale w jaki sposób?
z góry dziękuję za wszelkie informacje
Piotr Bochaczyk - 17-11-2006 07:15
takeshin wrote:
> witam! > > potrzebuję zamienić kolor > (docelowo funkcja w javascript) w postaci HEX np. na jego odpowiednik w > skali szarości > przykład: #22AE93=>#9a9a9a > > jak powinien wyglądać algorytm zamiany? > 0.5*rr+gg+0.3*bb = gg
a cały kolor szary to po prostu gggggg -- GCA/ED d s+:++ a C++ ULA P+++ L+ E--- W+++ N+++ o+ K- w+++ O+ M+ V- PS PE++ Y-- PGP- t-- 5-- X+ !tv R b+ DI-- D+ G e++ h--- r+++ z+++*
takeshin - 17-11-2006 07:15
>> witam! >> >> potrzebuję zamienić kolor >> (docelowo funkcja w javascript) w postaci HEX np. na jego odpowiednik w >> skali szarości >> przykład: #22AE93=>#9a9a9a >> >> jak powinien wyglądać algorytm zamiany? >> > 0.5*rr+gg+0.3*bb = gg > > a cały kolor szary to po prostu gggggg
dla mojego przykładu: rr=22 (34 dec) gg=AE (174 dec) bb=93 (147 dec)
23*0.5+174+147*0.3 = 235.1 (EB hex)
EB<>9A (154 dec)
skąd wziąłeś taki algorytm?
Piotr Bochaczyk - 17-11-2006 07:15
takeshin wrote:
> EB<>9A (154 dec) faktycznie mój błąd, tamten kawałek liczy coś innego ;)
prawidłowo powinno być: lum:=r*0.299+g*0.587+b*0.114;
ale to i tak nie da Twojego wyniku desaturacja to coś innego w wyniku niż zamiana na odcienie szarości ;)
desaturację robisz w następujący sposób... zamieniasz RGB->HSV S=0 zamieniasz HSV->RGB
a wzorki wyglądają tak (z pascalem sobie poradzisz mam nadzieję):
procedure TMyColor.RGBtoHSV; var delta,min:Extended; begin min:=MinValue([fR,fG,fB]); fV:=MaxValue([fR,fG,fB]); delta:=fV-min; if Round(fV*10000000)=0.0 then fS:=0 else fS:=delta/fV; if Round(fS*10000000)=0.0 then fH:=0 else begin if Round(fR*10000000)=Round(fV*10000000) then fH:=60.0*(fG-fB)/delta else if Round(fG*10000000)=Round(fV*10000000) then fH:=120.0+60.0*(fB-fR)/delta else if Round(fB*10000000)=Round(fV*10000000) then fH:=240.0+60.0*(fR-fG)/delta; if fH<0.0 then fH:=fH+360.0; end; end;
procedure TMyColor.HSVtoRGB; var i:Integer; hTemp:Extended; f,p,q,t:Extended; begin if fS=0.0 then begin if fH=0 then begin fR:=fV; fG:=fV; fB:=fV; end; end else begin if fH=360.0 then hTemp:=0.0 else hTemp:=fH; hTemp:=hTemp/60; i:=trunc(hTemp); f:=hTemp-i; p:=fV*(1.0-fS); q:=fV*(1.0-(fS*f)); t:=fV*(1.0-(fS*(1.0-f))); case i of 0:begin fR:=fV;fG:=t;fB:=p; end; 1:begin fR:=q;fG:=fV;fB:=p; end; 2:begin fR:=p;fG:=fV;fB:=t; end; 3:begin fR:=p;fG:=q;fB:=fV; end; 4:begin fR:=t;fG:=p;fB:=fV; end; 5:begin fR:=fV;fG:=p;fB:=q; end; end; end; end;
jedna uwaga... wartości RGB podane są jako liczby rzeczywiste z zakresu 0..1 H to kąt z zakresu 0..360 - oczywiście rzeczywisty S i V maja zakres 0..100 - jak wyżej daje to wyższą dokładność obliczeń i wykorzystuje kooprocesor ;)
-- GCA/ED d s+:++ a C++ ULA P+++ L+ E--- W+++ N+++ o+ K- w+++ O+ M+ V- PS PE++ Y-- PGP- t-- 5-- X+ !tv R b+ DI-- D+ G e++ h--- r+++ z+++*
takeshin - 17-11-2006 07:15
> faktycznie mój błąd, tamten kawałek liczy coś innego ;) > > prawidłowo powinno być: > lum:=r*0.299+g*0.587+b*0.114;
dzięki ;) coś takiego mi wystarczy
> > desaturację robisz w następujący sposób... > zamieniasz RGB->HSV > S=0 > zamieniasz HSV->RGB
sprawdziłem ten sposób, ale nie bardzo mi to działało... wybierało największą wartość z trzech składowych i pozostałe ustawiało na taką samą hmm... może coś spaściłem ;)
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
backup poczty w oraclu
[corel] jak hurtem element RBG -> CMYK
[mySQL] autoinkrementacja
Re: Przerysowanie mapy - jak najlepiej?
Licencja Oracle i niedoinformowana infolinia
"SELECT" w xharbour
=?iso-8859-2?q?Wywo=B3anie_procedury_sk=B3adowanej?=
Problemy z karta graficzna??
Pole integer - działanie nacałej bazie
dynamiczny sql
zanotowane.pldoc.pisz.plpdf.pisz.pldegrassi.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|