Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: QB: Qbasic. bmp kuvan lukeminen tietyltä alueelta.

E.K.Virtanen [01.11.2004 19:23:01]

#

Eli noita bmp lataajia qb:lle löytyy varsin mallikkaasti.

Omat aivot ei kuitenkaan nyt raksuta sen vertaa että tajuaisin seuraavan.

Minulla on 320*200(256 väri) bmp kuva josta haluaisin ladata kerrallaan 100*100 kokoisen alueen.

Tuo 100*100 alue vaihtuu ohjelmaa ajettaessa aina silloin tällöin ja 320*200 kuvia on tulossa useampia käyttöön.

Onnistuuko siis tuon alueen haku suoraan vai pitääkö bsavettaa ja paljon?

sqwiik [01.11.2004 20:44:05]

#

Näin nopeasti ajateltuna: muistaakseni BMP:n tiedostomuodossa (256 väriä) data on suoraan pötkössä (eli ei pakattuna). Koska käytössäsi on 320x200 kuva, 100x100-alueen piirto bittikartasta onnistuu seuraavasti:

1. avataan tiedosto
2. haetaan kuvadatan alkukohta
3. siirrytään eteenpäin Y * 320 + X, missä X,Y ovat kohdan aloituskoordinaatit bittikartassa.
4. Luetaan 100 merkkiä yksi kerrallaan ja piirretään pikseli kohtaan XX+Z1, YY missä XX,YY on ruudun piirtokohdan aloitus. Z1 on monesko tavu menossa (0...99)
5. Luettuasi nuo 100 merkkiä, siirry tiedostossa eteenpäin 320 - 100 = 220 merkkiä (eli seuraavan rivin alkuun). Lisää YY:tä yhdellä ja siirry kohtaan 4, jos ei ole vielä luettu 100 kertaa uutta riviä (laita vaikka laskuriin).
6. Sulje tiedosto.

Näin ainakin äkkiä ajatellen...

Metabolix [02.11.2004 05:08:04]

#

Meni muuten oikein, mutta Bitmap alkaa vasemmasta alakulmasta. Lukusuunta on vasemmalta oikealle ja alhaalta ylös, eli alin rivi ensin ja ylin rivi viimeisenä. On myös syytä muistaa, että 256-värisen bitmapin alussa on bitmapin infon lisäksi suhteellisen massiivinen paletti.

Jos kuvan koko on muuta kuin tuo 320x200, niin pitää muistaa, että data on aseteltu neljän tavun paketteina, eli jos rivillä on 241 tavua, sen lopussa on 3 tyhjää tavua.

E.K.Virtanen [03.11.2004 14:17:27]

#

Joo, kiitoksia. Pitää ruveta kokeilemaan.

Vastaus

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

Tietoa sivustosta