Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: BMP lukeminen

jone2712 [26.09.2017 15:28:50]

#

Minulla on 454*454 wintoosa bmp-kuva. Olen yrittänyt lukea tiedostosta pelkän datan ja tulostaa sen näytölle. Kuva vierii sivusuunnassa ja on mustavalkoista mössöä vaikka pitäisi olla väreissä. Bmp-kuvasta ei kiinosta headeri vaan data.

Metabolix [26.09.2017 16:43:27]

#

Aika olennaista kysymyksen kannalta on, missä muodossa kuva tarkalleen on (värimäärä, paletti jne.) ja miten luet ja tulostat sen ja mitä vaatimuksia ohjelmalle muuten on (esim. pitääkö käyttää jotain tiettyä kirjastoa).

Kuvan lataaminen ja piirtäminen sinänsä onnistuu helposti vaikka SDL-kirjastolla.

jone2712 [26.09.2017 21:20:10]

#

Minulla ei ole SDL-kirjastoa. Vanha 32-bittinen kääntäjä, joka on toiminut tähän päivään asti. Kuva on 24-bittisessä RGB-moodissa - tai ainakin pitäisi.

Tarkoituksena on piirtää BMP-kuva näytölle ja kaapata siitä informaatiota, tarkemmin shakkinappulat.

Tiedoston koko on 619310 tavua, josta kun vähennetään 454*454*3, headerin kooksi (joka ei kiinnosta) jää 962 tavua.

Grez [26.09.2017 21:49:42]

#

No jos nyt mietitään ihan BMP speksiä, niin 24-bittisessä 454 pikseliä leveässä rivissä on 1364 tavua. (Eli kaksi ylimääräistä tavua joka rivin lopussa jotta tavujen määrä per rivi olisi 4 jaollinen).

Näin ollen jos tiedoston koko on 619310 tavua, niin 1364*454 vähentämisen jälkeen headeriksi jää 54 tavua.

Tuo, jos siitä tulee mustavalkoista mössöä viittaisi siihen että käsittelet sitä luettua dataa jotenkin hassusti.

Sinänsä en ihan ymmärrä mitä sinulla on sen headerin lukemista vastaan. Saisit sen varsinaisen kuvadatan lukemiseen tarvittavat tiedot ilman arvailua.

jone2712 [26.09.2017 22:20:15]

#

Grez kirjoitti:

No jos nyt mietitään ihan BMP speksiä, niin 24-bittisessä 454 pikseliä leveässä rivissä on 1364 tavua. (Eli kaksi ylimääräistä tavua joka rivin lopussa jotta tavujen määrä per rivi olisi 4 jaollinen).

Tuo on hyvä tieto.

Grez kirjoitti:

Sinänsä en ihan ymmärrä mitä sinulla on sen headerin lukemista vastaan. Saisit sen varsinaisen kuvadatan lukemiseen tarvittavat tiedot ilman arvailua.

Onko hyvää linkkiä BMP-headeriin. Omassa netissä haku tökkii (pitäisi kaiketi bootata koko kone, mutta silloin menettää Billin Win10:nen).

Grez [27.09.2017 09:28:08]

#

https://msdn.microsoft.com/en-us/library/windows/desktop/dd183376(v=vs.85).aspx

jone2712 [03.10.2017 19:55:59]

#

Vielä jos joku joutuu painimaan saman asian parissa, suoraan tiedostosta bmp-kuvan lukeminen näytölle käy suunnillee koodilla:

void BitMapTest(void)
{
   HBITMAP menu=LoadImage(NULL, "C:\\ohjelmat\\uusio\\plaah.bmp",
   IMAGE_BITMAP, 454, 454, LR_LOADFROMFILE);
   HDC src=CreateCompatibleDC(NULL);
   SelectObject(src, menu);
   HDC dst=GetDC(__win_hwnd);
   BitBlt(dst, 0, 0, 454, 454, src, 0, 0, SRCCOPY);
}

Vastaus

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

Tietoa sivustosta