Suuri puute qbasic sivistyksessäni on etten ole koskaan palettia käyttänyt, sillä kun saisi varmaan vaikka mitä kivaa aikaan. Elikkä voisko joku vähän valistaa miten palettia käytellään. Kiitosta jo etukäteen.
Tämä sepustus koskee näyttötilaa 13.
Paletissa on 262144 väriä, joista kerrallaan 256 on käytössä. Paletin värit määritetään RGB-arvoilla (R = red = punainen sävy, G = green = vihreä sävy, B = blue = sininen sävy) asteikolla 0 - 63.
Esimerkiksi RGB(0,0,0) on musta, RGB(63,63,63) on valkoinen ja RGB(63,0,0) on punainen (varmaan osaatkin nämä valmiiksi).
Helpoin tapa muuttaa palettia on käyttää QB:n omaa PALETTE-komentoa. Ensimmäinen parametri on värin numero eli luku väliltä 0 - 255, joka on käytössä kaikissa grafiikkakomennoissa. Toinen parametri on värisävy, joka lasketaan kaavalla 65536 * blue + 256 * green + red.
SCREEN 13 'muutetaan väri 0 siniseksi PALETTE 0, 65536 * 63 + 256 * 0 + 0
Edistyneempi ja nopeampi tapa on käyttää OUT-komentoa. Ensin lähetetään porttiin &H3C8 värin numero, jonka jälkeen lähetetään porttiin &H3C9 punaisen, vihreän ja sinisen sävyn arvo.
SCREEN 13 'muutetaan väri 0 siniseksi OUT &H3C8, 0 OUT &H3C9, 0 OUT &H3C9, 0 OUT &H3C9, 63
Värien arvoja voi lukea vastaavasti INP-funktion avulla:
SCREEN 13 'luetaan värin 0 sävy OUT &H3C8, 0 r% = INP(&H3C9) g% = INP(&H3C9) b% = INP(&H3C9) PRINT r%; g%; b%
Tuliko selväksi? :)
Kiitos, erittäin selväksi tuli. Pitääpä lähteä sillä leikkimään, ja ehkä pitäisi yrittää opettaa sitä pikkuveljelleni, joka on 9-vuotias. Se on ohjelmoinu vasta viikon, mutta osaa silti tehdä mm. ympyrän jota liikutellaan nuolilla(pyyhkii jälkensä piirtämällä mustan ympyrän) ja osaa käyttää SINiä ja COSinia ympyrän tekemiseen, eli on käsittääkseni melko hyvä ikään ja harjoitusaikaan nähden:)
Itseasiassa kun palettia luetaan, niin värin indeksi tulee tunkea porttiin &H3C7.
SCREEN 13 'luetaan värin 0 sävy OUT &H3C7, 0 r% = INP(&H3C9) g% = INP(&H3C9) b% = INP(&H3C9) PRINT r%; g%; b%
Tuli tässä mieleen että mitä kaikkia portteja on olemassa? Onko niistä listaa jossain, jossa olisi myös sepustukset mihin portti vaikuttaa kun sen arvoa vaihdetaan?
Esim onko porttia, joka määrittää palaako CAPS Lockin valo vai ei?
Ks. http://www-2.cs.cmu.edu/afs/cs/user/ralf/pub/WWW/files.html
Ralph sanoo: "The interrupt list is a comprehensive listing of interrupt calls, I/O ports, memory locations, far-call interfaces, and more for IBM PCs and compatible machines, both documented and undocumented. Nearly eight megabytes of information in ASCII text files!"
Pitää vai?? Saattaa olla tyhmä kysymys, mutta miksi tuokin toimii??
lainaus:
Itseasiassa kun palettia luetaan, niin värin indeksi tulee tunkea porttiin &H3C7.
SCREEN 13 'luetaan värin 0 sävy OUT &H3C7, 0 r% = INP(&H3C9) g% = INP(&H3C9) b% = INP(&H3C9) PRINT r%; g%; b%
Niin siis tätä varten oli tuo edellinen kommentti
Kun kerran tässä paletista keskustellaan niin haluasin vielä kysästä, että miksi seuraavalla pätkällä EI saa muutettua esim. väriä 18 (eli yllättäen valkoista) vaikkapa siniseksi?
SCREEN 13
OUT &H3C8, 18
OUT &H3C9, 0
OUT &H3C9, 0
OUT &H3C9, 63
Paletin muuttaminen alotetaan nollasta? Oon kuullu ainaki tommosta.. En sit tiie..
lainaus:
Kun kerran tässä paletista keskustellaan niin haluasin vielä kysästä, että miksi seuraavalla pätkällä EI saa muutettua esim. väriä 18 (eli yllättäen valkoista) vaikkapa siniseksi?
Minulla ainakin toimii tällainen ohjelma täysin oikein:
SCREEN 13 OUT &H3C8, 18 OUT &H3C9, 0 OUT &H3C9, 0 OUT &H3C9, 63 'piirtää sinisen viivan LINE (10, 10)-(100, 10), 18
Ja väri 18 ei kyllä oletuksena ole valkoinen vaan tummanharmaa.
Screen 12 eikä Screen 13 piti sanomani :) Käsi on näköjään ajatusta nopiampi...
Eli tämmönen pätkä tekee viivasta valkoisen, vaikka haluasin esim. sinisen:
SCREEN 12
OUT &H3C8, 18
OUT &H3C9, 0
OUT &H3C9, 0
OUT &H3C9, 63
Eikö paletti toimi screen 12?
lainaus:
Screen 12 eikä Screen 13 piti sanomani :) Käsi on näköjään ajatusta nopiampi...
SCREEN 12 :ssa voi olla vain 16 väriä yhtäaikaa käytössä eli värinumerot 0 - 15. Väri 18 on mahdoton, ja taitaapa olla niin, että kaikki värit 15:sta ylöspäin näkyvät saman värisinä.
Minulla ainakin toimi 63 erisävyistä vihreää, kun vaihdoin SCREEN 12:aan. Ainut että tuli vihreet reunuksetkin, mutta muuten ihan samalla lailla kun SCREEN 13:kin.
Vihreät reunukset? Muutit värin 0 vihreäksi? ;)
En, jos värin nolla muuttaa vihreäksi, muuttuu koko taustan väri.
Aihe on jo aika vanha, joten et voi enää vastata siihen.