Tuosta hunajavohvelin liukuvärivinkistä innovatisoiduin kertomaan, miten kaksi väriä sotketaan keskenään. Idea on siis senlaatuinen, että ensin katsotaan miten paljon värit sisältävät mitäkin pääväriä, sekoitetaan ne keskenään, ja muutetaan lopulta väriksi RGB-funkkarilla.
Simppelihän tämä vinkki on, sitä ei tarvi erikseen kommenteerauksessa kertoa, mutta ehkä joku tästä voi hyödyntäytyä :)
Väri1 ja Väri2 ovat keskenään sekoitettavat värit, ja Sotkusuhde kertoo, kuinka paljon Väri2:ta painotetaan. Sotkusuhteen pitäisi oleskella välillä 0 - 1.
Tässä on esimerkillinen tapa käyttää funktiota:
Dim Miksattu As Long Miksattu = SotkeVäri(RGB(0, 0, 0), RGB(255, 255, 255), 1 / 2) 'Tuloksena on jotakuinkin keskiharmahtava väri Miksattu = SotkeVäri(RGB(0, 0, 0), RGB(0, 0, 255), .8) 'Tästä tulee on vaaleansininen Miksattu = SotkeVäri(RGB(96, 96, 0), RGB(255, 0, 0), .4) 'Tästä saadaan VERENpunaista
Public Function SotkeVäri(Väri1 As Long, Väri2 As Long, Sotkusuhde As Single) 'Muuttujien varaaminen on VB:ssä hyödyllistä, mutta selkeyden vuoksi tein silti :o '(tällaisessa tapauksessa ero varaamisen ja varaamatta jättämisen välillä 'ei ole suuri, mutta korjasin silti kommenteerauksen vohvelin mieliksi) Dim R1 As Byte, G1 As Byte, B1 As Byte Dim R2 As Byte, G2 As Byte, B2 As Byte 'Lopullinen väri Dim Punainen As Byte, Vihreä As Byte, Sininen As Byte 'Haetaan värien R-, G- ja B-arvot. 'Homma pelaa siis siten, että punaisuus on kerrannoitu yhdellä, vihreys 256:lla, ja sinisyys 65536:lla, 'joten jakojäännöksillä pystytään kätevällisesti palauttaamaan alkuarvot, joista väri koostuu: R1 = Väri1 Mod 256 G1 = (Väri1 \ 256) Mod 256 B1 = Väri1 \ 65536 R2 = Väri2 Mod 256 G2 = (Väri2 \ 256) Mod 256 B2 = Väri2 \ 65536 'Jos joku kummastelee hoipertelevaa jakoviivaa, ilmoitan täten että a \ b on osapuilleen Int(a / b) - 1 'Kun lasketaan keskiarvoa (x = (a + b) / 2), sekoitussuhde on kutakuinkin tasan shiggetyshiggety. 'Sitä muuttelemalla voidaan painottaa toista tekijää (b) Punainen = R1 * Sotkusuhde + R2 * (1 - Sotkusuhde) Vihreä = G1 * Sotkusuhde + G2 * (1 - Sotkusuhde) Sininen = B1 * Sotkusuhde + B2 * (1 - Sotkusuhde) SotkeVäri = RGB(Punainen, Vihreä, Sininen) End Function
Hyvin toimii funktiomuodossakin. Periaatehan tuossa taitaa olla pitkälti sama kuin minunkin vinkissäni. Toiminnan olet selittänyt kyllä paljon paremmin. :)
koodin kommentti kirjoitti:
Muuttujien varaaminen on VB:ssä hyödytöntä, mutta selkeyden vuoksi tein silti :o
Kyllä siitä hyötyä on. Määrittelemättömistä muuttujista tulee variantteja, joiden käsittely on hitaampaa.
Lisäksi kirjoitusvirheet paljastuvat, jos ohjelman alussa lukee "Option Explicit", eli kaikki muuttujat täytyy määritellä.
ihan kätevä on
vohveli kirjoitti:
Periaatehan tuossa taitaa olla pitkälti sama kuin minunkin vinkissäni.
Kappas, luin nyt vinkkisi loppuun asti, ja näin tosiaan on. Kyllä me ollaan molemmat tultu järkevällä aivotyöskentelemisellä samaan tulokseen, joten sen on pakko olla oikein ;)
Vohveli ja Puhveli ^^
Aihe on jo aika vanha, joten et voi enää vastata siihen.