Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: BMP:n tiedostorakenne

hunajavohveli [11.07.2004 15:28:06]

#

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.

zacura [11.07.2004 16:38:17]

#

Google antoi:
http://www.csdn.net/Dev/Format/windows/Bmp.html
http://www.fortunecity.com/skyscraper/windows/364/bmpffrmt.html

Kyllä QB:llä pystyy lukemaan tiedostosta vaikka tavun kerrallaan:

DIM data AS STRING * 1

Tuo tekee yhden tavun kokoisen muuttujan.

edit: typoja

Metabolix [11.07.2004 16:47:31]

#

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.

hunajavohveli [11.07.2004 16:52:22]

#

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

Antti Laaksonen [11.07.2004 22:52:51]

#

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

Vastaus

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

Tietoa sivustosta