Fórumok
Szeretnék egy képet C forráskóddá konvertálni. A kép 256x192-es, 1 bites. Eredményként egy olyan C tömböt szeretnék kapni, amiben 1 bájt 8 pixelnek felel meg, de már lassan megelégednék olyannal is, ahol egy bájt egy pixel.
A GIMP konerziója 3 vagy 4 bájtos RGB(A) adatot generált, így inkább az ImageMagick convert parancsával próbálkoztam. Sajnos azzal sem sikerült elérnem a kellő eredményt. Ha jól vettem ki a leírásból, GIF formátumú tömböt generál, és nem bitmap-et.
Ha valaki meg tudná mondani, hogy a "convert" parancsot hogyan kell felparaméterezni ahhoz, hogy pixelenkénti C tömböt generáljon egy képből, azt nagyon megköszönném.
Megoldás: A célfájl kiterjesztése legyen .xbm
Hozzászólások
Az XBM formátumot keresed.
Egyelőre ez nem segített. Csináltam teszthez egy 256x192-es fehér képet, 1 bites palettával. Ezt próbáltam konvertálni a következő paranccsal:
Az eredmény egy C tömb, amiben nem csupa egyforma 38468 bájt van. Az eredeti képben pedig 49152 pixel, aminek jó esetben 6144 bájtnak kellene lennie.
Egyébként próbáltam a PBM és MONO formátumokat is, de ezek sem hozták a megfelelő eredményt.
Nekem ez így működik.
Azért 38468 byte a file mérete, mert a formátum 1 byteot ~6 byteon tárol " 0x00,". (plusz header, plusz \n, plusz soreleji space)
6144 byte van a tömbben! Ez kell nekem, köszönöm! Még közvetlenül átméretezéssel és színkonverzióval is működik:
Valaszd kette a problemat. Egyreszt barmibol igy tudsz `unsigned char` jellegu C tombot csinalni:
Masreszt meg hogy mivel csinalsz egy 0/1 (1bites) bitmap-et. Arra tenyleg jo lehet a convert/bmp vagy netpbm vagy ilyesmi. Konkretan en meg csak greyscale-t csinaltam ezutobbival, de siman lehet hogy van valami depth vagy hasonlo parametere. Mondjuk ha jol ertem, valami modon mar eleve adott nalad ez a kep (A kép 256x192-es, 1 bites.). Szoval nulladik kerdes az is lehet hogy ez milyen formaban/formatumban adott tulajdonkeppen nalad?
Szerk: imigy: `convert x.jpeg -monochrome -colors 2 x.bmp` Ha teljes pipeline kell, akkor:
(itten kiserleti informatikaval arra jutottam hogy 146 byte a BMP header, de persze ez lehet mas is... szoval ez kicsit trial & error)
Mi a cél: hogy ne kelljen fájlból beolvasni, vagy hogy könnyű legyen a pixeleket programból kezelni?
A cél az volt, hogy könnyen tudjon a program hozzáférni a pixelekhez.
Ahhoz nem kell a program részéve tenni a képet, inkább egy libjpeg vagy imagemagick szerű library-t használva memóriában bitmappá alakítani a jpeg-file tartalmát.