Koodivinkeistä löytyi Laaksosen tekemä BMP-laturi, jossa oli hieman selitetty BMP:n tiedostorakennetta, mutta siitäkään se ei käynyt ilmi aivan täsmällisesti. Yritän siis tehdä QBasicilla omaa mahdollisimman yksinkertaista laturia 4-bittisille kuville, ja tarvitsisi hieman tietää, mitkä alussa olevista luvuista viittaavat bittikartan mittoihin yms. ja mistä alkaa ja missä muodossa varsinainen kuvadata on. Jonkinlaisen kaksoispuskuroinnin purkamisen joudun ilmeisesti tekemään, kun QB:llä saa luettua tiedostosta minimillään Integer-kokoisiin muuttujiin.
Google antoi:
http://www.csdn.net/Dev/Format/windows/Bmp.html
http://www.fortunecity.com/skyscraper/windows/
Kyllä QB:llä pystyy lukemaan tiedostosta vaikka tavun kerrallaan:
DIM data AS STRING * 1
Tuo tekee yhden tavun kokoisen muuttujan.
edit: typoja
Itse olen jo selvittänyt koko bitmapin rakenteen, ainakin sen millä on merkitystä. Se ei ole kovin vaikeaa jos omistaa heksaeditorin (niitä taas on helppo löytää).
Teet tyhjän bitmapin. Muutat aina vain yhtä ominaisuutta ja katsot mikä luku muuttuu.
Zacura:
Joo, tiedän, että noin saisi tavun kokoisen, mutta STRING on merkkijono ja sitten joutuisi tekemään konversioita. Ja eikös 4-bittisessä bittikartassa pakata kaiken lisäksi 2 pikseliä yhteen tavuun? Tällöin joutuisin ilman purkamista lukemaan puolitavuja. Tuo ylimmäinen linkki ei muuten toimi, mutta yritän saada jotain selkoa tuosta alemmasta, tosin se näyttää sekavammalta kuin olisi tarve, sillä siinä selostetaan luultavasti myös suurisyvyisempiä bittikarttoja.
Metabolix:
Voisihan noin tehdäkin, mutta se olisi todella hidasta, enkä sittenkään välttämättä tajuaisi kaikkea ominpäin, vaikka jotain olen jo onnistunut päättelemään. Siksi juuri kysyn asiaa täältä.
Toisessa zacuran kertomassa linkissä on ainakin selitetty hyvin nuo asiat. Tärkein tieto BITMAPFILEHEADERissa on alkutunnus "BM" (bfType), jonka avulla on hyvä tarkistaa, että tiedosto on suunnilleen oikeanmuotoinen. BITMAPINFOHEADERissa tärkeät tiedot ovat kuvan leveys (biWidth) ja korkeus (biHeight) sekä värimäärä (biBitCount). Jos värimäärä on 4, kuva on 16-värinen. Seuraavana on vuorossa paletti, jossa on tässä tapauksessa 16 väriarvoa. Lopuksi tulee itse kuvadata, ja 16-värisessä kuvassa tosiaan yhteen tavuun mahtuu kahden pikselin väri. Kuva on tallennettu ylhäältä alas, joten piirto täytyy aloittaa viimeisestä rivistä.
Vinkkejä:
Tiedostossa olevan paletin arvot täytyy jakaa neljällä, koska VGA-paletin arvot ovat väliltä 0 - 63.
Kannattaa lukea tiedostosta kerralla suurempia osuuksia, koska se on nopeampaa kuin joka tavun lukeminen erikseen.
Yhden kuvassa olevan rivin pituus on aina jaollinen neljällä. Lopussa on tarvittaessa ylimääräisiä nollaksi merkittyjä tavuja.
Jos tavu koostuu kahdesta neljän bitin pituisesta luvusta, saat luvut selville esim. näin:
vasen = (luku AND &HF0) / 16 oikea = luku AND &HF
Aihe on jo aika vanha, joten et voi enää vastata siihen.