Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: VB6: Kahden värin miksaus

Puhveli [22.05.2005 12:44:55]

#

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

hunajavohveli [29.05.2005 08:35:33]

#

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.

Antti Laaksonen [29.05.2005 11:03:34]

#

Lisäksi kirjoitusvirheet paljastuvat, jos ohjelman alussa lukee "Option Explicit", eli kaikki muuttujat täytyy määritellä.

tesmu [29.05.2005 13:58:50]

#

ihan kätevä on

Puhveli [29.05.2005 20:54:48]

#

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 ;)

arcatan [30.05.2005 16:19:27]

#

Vohveli ja Puhveli ^^

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta