Juha-Pekka Kuusela | jpq@mbnet.fi
Koodausvinkkejä kuvankäsittelyyn

Nopea blur

Pikseli A on se mihin blur tehdään. Sitten lasketaan pikselien B, C, D, E ja A keskiarvo, jolloin saadaan uusi pikseli A:n arvo. Sitten siirrytään pikselin verran vasemmalle, ja kun koko rivi on käyty läpi, siirrytään seuraavalle pikseliriville. Menetelmäni ei ole se mitä yleensä kuvankäsittelyohjelmat ilmeisesti käyttävät. Jälki on täysin saman näköistä, koodini on vain nopeampaa ja helpommin koodattavissa. Normaali menetelmä tosin sallii muitakin efektejä kuten terävöityksen sekä ilmeisesti "oil paint" ja "fresco" onnistuisivat sillä myös.

Kuvassa keltaisella pohjalla olevat kirjaimet plus yksi vihreä pohjainen pikseli on algorytmissä mukana niille jotka harmaalla pohjalla ei tehdä mitään ja tämä värikoodaus koskee myös aweragen kaaviota.

Average 3x3

Pikseli A on se mihin average 3x3 tehdään. Sitten lasketaan pikselien B, C, D, E, F, G, H, I ja A keskiarvo, jolloin saadaan uusi pikseli A:n arvo. Sitten siirrytään pikselin verran vasemmalle, ja kun koko rivi on käyty läpi, siirrytään seuraavalle pikseliriville.


--- Tässä varsinainen esimerkkikoodi ---

; Syy BlitzBasicin käyttöön on se että osaan
; sitä paremmin kuin C:tä.

; COPYRIGHT 2003 Juha-Pekka Kuusela
; Suomi/Finland

; Koodia ei saa varastaa/levittää, mutta
; oppia saa ottaa.

; Koodi on vain mustavalkoinen, ECS/AGA:ssa
; ei ole truecolor-tilaa. Kuka vain voi
; soveltaa tämän väreille.

NoCli
WBStartup
BitMap 0,320,256,4

BLITZ
Slice 0,42,4
Show 0

For col=0 To 15
RGB col,col,col,col
Next

; lumisade (TV:stä tuttu sellainen) kulmaus

For x=0 To 159
For y=0 To 119
Plot x,y,Rnd(15)
Next
Next

; jotain muuta törkyä

For lask=0 To 3599

hx=240+Sin(lask/72*Pi)*25+Sin(lask/90*Pi)*25
hy=60+Sin(lask/360*Pi)*25+Sin(lask/45*Pi)*25
Plot hx,hy,15
Next

MouseWait

; Ehkäpä maailman hitain blur-koodi, BlitzBasic
; on hidas. Ideaa ei saa minun taidoillani
; nopeammaksi jos BlitzBasicia ajaa eikä kai
; muutenkaan. Pelkät laskutoimitukset ovat
; hitaita - johtuneeko siitä, että luen pikselin
; värin näyttömuistista mutta kyllä BlitzBasic 2
; taulukkoversiokin oli 68060:lla tervaa
; C-versioon nähden ja muutenkin vaikka ei
; edes vertailisi.

For xk=1 To 318
For yk=1 To 254
kesk=Point(xk,yk)
vyla=Point(xk-1,yk-1)
oyla=Point(xk+1,yk-1)
vala=Point(xk-1,yk+1)
oala=Point(xk+1,yk+1)
kskiarvo=(kesk+vyla+oyla+vala+oala)/5
Plot xk,yk,kskiarvo
Next
Next

Antialias
Tämän idean selitän vain tekstinä. Jos resoluutio, johon halutaan antialias on 320x240, niin piirretään materiaali esim. 640x480 tai 960x720 ja skaalataan pehmentäen. Näin haluttuun kokoon eli lasketaan yhden 320x240 pikselin väri ensimmäisessä tarkkuusesimerkissä neljästä pikselistä ja toisessa yhdeksästä. Ja kappas vain, kulmikas monikulmiograafiikka pehmenee. Tämä ideahan ei kyllä kaikella materiaalilla ihan niin hyvin toimine kuin oikea antialias, mutta kaipa tälläkin edes demoissa ja ehkä peleissäkin tekee jotain - vai tekeekö, sen päättää jokainen itse. Tämä on ainoa, jonka idea on "rötsitty", eli tämä siis on tapa mitä käsittääkseni 3D-kortit käyttävät reunojen pehmennykseen tai ainakin ovat käyttäneet, jollen ole väärää tietoa saanut.

Sivun alkuun