tietääx ketään sellaista algoritmia, jolla syntyy kartta eli suuret arvot vastaa kaikki kanavat täysillä ja pienet arvot vastaa kaikki kanavat pienellä ja siinä välissä sininen vastaisi nollaa eli merenpinnantasoa? Täs ei tarvitse välittää numeroarvoista sinänsä, vaan tavoite on liukuva väri sen arvon mukaan riippumatta siitä, mikä se lähtö on ja mihin se päättyy. Mä mappaan ne kyllä sitten.
RGB-algoritmi?
ei paletti-indexeille
9758
0Äänestä
Muut lukivat myös
Ketjusta on poistettu 9 sääntöjenvastaista viestiä.
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 9
Vanhimmat
sama suomeksi kiitos?
skaalassa miinus miljoona, plus miljoona eli visualisoitava ARVO kuuluu väliin [-1e6,1e6] ja mä ajattelin, että miinus miljoonaa vastaisi musta ja plus miljoonaa valkoinen väri ja siinä välissä väri muuttuisi ARVON mukana liukuen mustasta valkoiseen käyden läpi spektrin eri värejä jollain järkevällä logiikalla, jonka se algoritmi, joka laskee punaiselle ja siniselle sekä vihreälle värille määriä siinä ARVON tarkoittamassa pisteessä, ettei hyvästä datasta syntyisi kelvotonta kuvaajaa
Oletan että käytät 16 miljoonan palettia. Tällöin punainen(R), vihreä(G) ja sininen(B) voivat kaikki olla nollasta 255:een.
Jokaista dataarvoa kohti tee seuraava:
1) Normalisoi arvo väliin [0,2e6]
2) Laske sininen B=mod(arvo,255)
3) Laske punainen R=mod(arvo/255,255)
4) Laske vihreä R=mod(arvo/255^2,255)
täysille ja muut hävis kokonaan
Tuo algoritmi kyllä toimii joten se taitaa olla implementaatiosta kiinni, jos liittäisit koodisi mukaan niin tietäisi paremmin...
sinisen kanavan suhteellinen osuus koko skaalan alueella järjestyksessäsi punaiseen nähden nähden 255-kertaiseksi ja vihreään nähden (255*255)-kertaiseksi, joten ne häviävät eli niitten osuutta ei voi silmäilemällä nähdä siitä sinisestä.
mulla on ARVOJA välillä minimiARVO,maksimiARVO ja mä skaalaan sen koko kanavan leveyteen eli maxKanava=255, niin silloinhan siitä saadaan siniselle eli B(ARVO) = maxKanava / ( maxARVO - minARVO ) * (ARVO - minARVO), joka todellakin kauniisti palauttaa sinistä välillä 0,255, mutta punainenpa palauttaakin 1/255 ja vihreä 1/(255*255) ==> pelkkää sinistä näkyy. Se on aivan sama, pelaillaanko siinä jakojäännöksillä vaiko millä ==> yksi väri vallitsee. Mut jos sulla on jotain dokumentaatiota tuohon algoritmiin liittyen, niin mä voisin sinne laittamastasi linkistä mennä kahtoon, mitä mä en ymmärtänny siinä niin.
En nyt tiedä mikä on niin vaikeaa siinä koodin postaamisessa mutta epäilen että et ymmärtänyt sitä arvon normalisoinnin kohtaa.
Postaan nyt kaksi esimerkkifunktiota jotka tekevät sen, Ensimmäinen on se helpompi niistä mutta siinä on se haittapuoli että se menee ensin tummansinisestä valkoseen, sitten tumman punaisesta valkoiseen jne. Toinen funktio tekee sen ns. oikeasti mutta on myös vaikeampi ymmärtää (ja vielä vaikeampi selittää ilman koodia).
int RGB(int minArvo, int maxArvo, int arvo, int *R, int *G, int *B)
{
/* Tarkistetaan että arvo on mahdollinen */
if(arvo > maxArvo || arvo < minArvo) return -1;
/* Normalisoidaan skaala [0, maxArvo] */
maxArvo += -minArvo;
arvo += -minArvo;
minArvo += -minArvo; /* =0 */
/* Normalisoidaan arvo RGB väreihin nähden */
arvo = int((arvo*16e6)/maxArvo);
/* Luodaan RGB komponentit */
*B = arvo % 255;
arvo /= 256;
*R = arvo % 255;
arvo /= 256;
*G = arvo % 255;
return 0;
}
int RGB2(int minArvo, int maxArvo, int arvo, int *R, int *G, int *B)
{
/* Tarkistetaan että arvo on mahdollinen */
if(arvo > maxArvo || arvo < minArvo) return -1;
/* Normalisoidaan skaala [0, maxArvo] */
maxArvo += -minArvo;
arvo += -minArvo;
minArvo += -minArvo; /* =0 */
/* Normalisoidaan arvo RGB väreihin nähden */
arvo = int((arvo*1530)/maxArvo);
/* Muodostetaan värikomponentit aloitetaan sinisestä*/
*R = 0;
*G = 0;
*B = 255;
if(arvo > 255){ arvo -= 255; *R=255; }
else{ *R = arvo; return 0; }
if(arvo > 255){ arvo -= 255; *B=0; }
else{ *B -= arvo; return 0; }
if(arvo > 255){ arvo -= 255; *G=255; }
else{ *G = arvo; return 0; }
if(arvo > 255){ arvo -= 255; *R=0; }
else{ *R -=arvo; return 0; }
if(arvo > 255){ arvo -= 255; *B=255; }
else{ *B = arvo; return 0; }
if(arvo == 255) *G=0;
else *G -= arvo;
return 0;
}
avaruusvektoriaanisen kolmiulotteisvärin patenttihakemuksenne suosiolla ja ajoissa pois eli suosittelisin, että jätätte sen suosiolla ja tällä puheella jättämättä: olen kiistatta ja riidatta dokumentoinut esittämäni menetelmän, jolla edellisen kirjoittajan julkituomasta rautalangasta itseni tahi kenenkä vaan toimesta väännellyn 3d-katiskan reikiin saadaan järkevää väriä, myös muualla. Eikö ylläpidon tulisi sääntöjenne mukaisesti esiintyä tunnistettavasti ylläpitona, mikäli katsoo aiheelliseksi ottaa osaa keskusteluihin?
että tuolla tavalla katiskalangoistansa kouhottavan tahon annetaan täällä huseerata romuttamassa kaikki vähänkään järjelliset aateekookeskustelut: kyllähän näissä keskusteluissa täytyy voida keskustella muistakin lähtökohdista kuin niistä, että hänen tahi hänelle pitaa saada postailluksi vindovsin ja kaiken muunkin sorsat ja alkoritmit, että hän sitten voi katiskalangoillaan ne harsia yhteen, miten taitaa. Hey comoon dudes, lets make a program not war!