Tervehdys kaikille,
Olen tässä vääntänyt pientä kuvankäsittely ohjelmaa ja törmäsin pieneen ongelmaan.
Tarina hetkemme alkaa siitä, kun olin pohtimassa tapaa toteuttaa kuvankäsittely ohjelmaan piirto toimintoa.
Päädyin loppujen lopuksi tallentamaan Pixel olioiden tiedot taulukkoon. Pixel sisälsi siis kaikessa yksinkertaisuudessaan värin ja sijaintinsa.
Tämän jälkeen siirryin piirtämään taulukon pikselit ruutuun for -silmukassa. Huomasin kuitenkin, että pikseli pikseliltä piirto on todella hidasta.
Näin ollen päästään lopulliseen kysymykseen, että miksi CPU:lla for -silmukassa kuvan piirtäminen pikseli pikseliltä drawPoint -funktiolla on hintaampaa kuin kuvan piirtäminen valmiilla drawImage -funktiolla.
Kyseessä Qt -kirjasto ja näin ollen drawPoint -funktio for -loopissa hitaampi kuin drawImage yhtenä kutsuna.
Kummassakaan piirrossa ei Qt käsittääkseni käytä laitteisto kiihdytystä? Näin ollen QPainterin drawImage käytännössä vastaa tuota minun piirtotapaa eli silmukassa kaikki pikselit vaa ruutuu.
Samaan ongelmaan taisin törmätä myös aikonaan wanhemmalla SDL versiolla eli ei tällä uudella 2.0. Pikseli pikseliltä piirto oli hitaampaa mitä kuvan blittaaminen ruutuun.
- Kiitos
Varmaankin drawPointissa tehdään jokaisen pikselin piirron yhteydessä erillinen funktiokutsu ulkoiseen kirjastoon ja mahdollisesti samassa yhteydessä tehdään monenlaisia tarkistuksia (kuten onko piirrettävä pikseli piirtoalueen sisällä ja onko parametrit muuten sallituissa rajoissa), lasketaan piirtoalueeseen liittyviä parametreja, jne.
drawImagellahan tuollaisia kutsuja, tarkistuksia ja laskuja ei tarvitse tehdä kuin kerran ja varsinainen kirjoittaminen näyttömuistiin voidaan tehdä hyvin yksinkertaisessa silmukassa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.