Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: QB, VB6: Paletti

Sivun loppuun

kurz [22.08.2003 22:02:46]

#

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.

Antti Laaksonen [22.08.2003 22:59:09]

#

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? :)

kurz [23.08.2003 10:27:12]

#

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

thefox [23.08.2003 17:04:19]

#

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%

odys [23.08.2003 17:08:22]

#

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?

thefox [23.08.2003 17:18:04]

#

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!"

kurz [23.08.2003 18:15:08]

#

Pitää vai?? Saattaa olla tyhmä kysymys, mutta miksi tuokin toimii??

kurz [23.08.2003 18:15:51]

#

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

Tuju [24.08.2003 16:35:31]

#

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

odys [24.08.2003 16:58:36]

#

Paletin muuttaminen alotetaan nollasta? Oon kuullu ainaki tommosta.. En sit tiie..

Antti Laaksonen [24.08.2003 20:05:30]

#

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.

Tuju [25.08.2003 17:18:02]

#

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

tejeez [25.08.2003 17:25:32]

#

Eikö paletti toimi screen 12?

Antti Laaksonen [25.08.2003 20:12:06]

#

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ä.

kurz [26.08.2003 13:28:29]

#

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.

tejeez [26.08.2003 14:46:52]

#

Vihreät reunukset? Muutit värin 0 vihreäksi? ;)

kurz [27.08.2003 14:46:44]

#

En, jos värin nolla muuttaa vihreäksi, muuttuu koko taustan väri.


Sivun alkuun

Vastaus

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

Tietoa sivustosta