![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 164 Pomógł: 3 Dołączył: 13.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Czy ktoś może zna sposób na to aby niejako zaokrąglić dowolny kolor zapisany w systemie szesnastkowym, do najbardziej zbliżonego mu koloru ze zdefiniowanej wczesniej palety, np. "web safe"? Chodzi o to żeby np. 5 rodzajów czerwieni (#CC0001,#CC0002,#CC0003,#FF0003,#990005) wynikowo "zaokrąglić" np. do #CC0000. Są klasy i funkcje wyciągające paletę z obrazka, ale te które widziałem wypluwają najróżniejsze kolory, marzy mi się żeby te kolory uprościć żeby były w jakimś z góry zdefiniowanym zbiorze, np. web safe. Może ktoś podpowie jak to ugryźć, albo zna jakieś gotowe rozwiązanie? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Przygotuj tabelę bezpiecznych kolorów.
Potem w pętli musisz sprawdzić dystans między badanym kolorem, a kolorem z tablicy. Dystans liczysz tak: pierw((r2-r1)^2 + (g2-g1)^2 + (b2-b1)^2) Oczywiście najmniejszy dystans to najbliższy kolor. -------------------- |
|
|
![]() ![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 164 Pomógł: 3 Dołączył: 13.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki Trueblue. Nie działa mi to według tego jak zrobiłem do testów... Help.
Cytat pierw((r2-r1)^2 + (g2-g1)^2 + (b2-b1)^2) ten sposób raz trafia, raz nie: Cytat sqrt((r2-r1)^2 + (g2-g1)^2 + (b2-b1)^2) Ten post edytował kleszczoscisk 25.03.2014, 10:44:08 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Na pewno błąd jest w liczeniu różnicy, "^" ma inne znaczenie w PHP.
Popatrz również na wartości hex losowych kolorów, niektóre są pięcioznakowe. Ten post edytował trueblue 25.03.2014, 12:23:23 -------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 164 Pomógł: 3 Dołączył: 13.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Uff... problem był w sposobie liczenia dystansu, w zależnoci od tego która wartosc RGB (zadana czy szukana) była większa od tej należało odjąć:
$row[2], $row[3], $row[4] - wartosci rgb szukane $color_r,$color_b,$color_b - rgb zadane Dzięki za pomoc. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Nie, źle liczysz.
Nie ma znaczenia, która jest większa, bo różnicę podnosisz do kwadratu. Różnicę każdej składowej podnosisz do kwadratu, dodajesz składowe i z sumy wyciągasz pierwiastek. -------------------- |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 164 Pomógł: 3 Dołączył: 13.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
To równanie to nic innego jak dystans euklidesowy: http://pl.wikipedia.org/wiki/Odleg%C5%82o%C5%9B%C4%87
Wyobraź sobie, że działasz w przestrzeni 2D (a nie 3D jak w Twoim przypadku). Nie możesz obliczyć odległości między dwoma punktami na zasadzie różnic ich współrzędnych (według Twojego algorytmu odległość między punktem (2,2) a (4,4) jest taka sama jak między (2,2) a (2,6)). -------------------- |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 164 Pomógł: 3 Dołączył: 13.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Świat jest piękny, jeszcze tyle można się nauczyć
![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 05:51 |