Nem akartam új topicot ezért szerkesztek. A beolvsás szűrés + alakafelsmerést már megírtam (ez csak matek ehez nem kell tudni nagyon prgramozni), de életemben nem írtam ki bináris filet. Mindíg csak TXT-t. Képet meg pláne nem. Mindenképp képet kellene valahogy kicsiholnom. egsz pontosan egy memóriaterület adataiból. De ez nem fontos. Na az a lényeg, hogy hogyan tudok bináriba kiirattani C++-al. (egész pontosan bmp 0-s tömörítésű bmp).
Ebből indult az egész.:
Sziasztok.
Munkám során belefutottam egy ilyen dologba, hogy a bmp képeket képpontokra kell szednem, és azon kell klasztert detektálnom (a klaszterező algoritmoust már rég megírtam, de txt adatokból dolgozik, és nem bmp-ből), csak annyi a baj, hogy a bmp feldolgozása hogyan oldható meg. ki kellene szedni a képből az adott pont x,y kordinátáit + kell egy szám ami az rgb-k összege, és kész. Nem tudom, hogy hogyan induljak, mert még ilyet nem csináltam.
Köszi előre is mindenkinek. Eddig csak numerikus matematikai feladatokat írtam ott nem kellet ilyen. Ja mentségemre nem vagyok programozó. ("Műkedvelő fizikus" volnék.) :-). Jó egy-két doksi is.
- 1916 megtekintés
Hozzászólások
Rengeteg módja van. Ha sima konzolos applikációt írsz (gondolom azt), akkor javaslom a következőt:
Ez egy jó kis képmegjelenítő/feldolgozó osztály. BMP elvileg megy zsigerből, és ráadásul ad egy egész használható képreprezántációs osztályt is.
- A hozzászóláshoz be kell jelentkezni
Köszi szépen bár alap C -ben és nem cpp-ben írom.
Egyébként igen konzolos lesz. úgy is csak a vezérléshez kell a kimeneti adat.
- A hozzászóláshoz be kell jelentkezni
Nem lesz ez necces ansi C-ben sem. Megtaláltam a bmpszerkezet leírását. a fejlécben benne van hogy mi mit követ utána meg egy rgb folyam.
- A hozzászóláshoz be kell jelentkezni
Erdemes talan a pnm (ppm, pgm, alkalmazastol fuggoen) formatumot is megnezni. Gyk 1:1-be beolvashatod a memoriaba. A mar meglevo" bmp (vagy akarmi egyeb) formatuombol tudsz a `bmptopnm` paranccsal pnm-et csinalni, illetve a `ppmtopgm` megcsinalja az rgb -> szurkearnyalat konverziot is. Sot, van sima ascii formaja is a pnm-nek, ha ugy egyszerubb a beolvasas (pl sima *scanf() fv-ekkel). Lasd me'g: `man 5 pnm`, `man 5 pgm`.
A.
- A hozzászóláshoz be kell jelentkezni
Ez szimpatikus már megoldottam mondjuk 0-s tömörítésű bmp-re, de megnézem ezeket is. köszi.
- A hozzászóláshoz be kell jelentkezni
Szerintem ne állj neki kézzel BMP readert írni, mert egyrész felesleges, másrészt mi történik ha egy egzotikusabb bmp jön szembe? (RLE, más színmélység stb.)
Ami neked kell az egy image lib C-hez.
Most hirtelen az ImageMagick jutott eszembe:
http://www.imagemagick.org/script/magick-wand.php
A második példában kb minden benne van ami neked kell.
"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o
- A hozzászóláshoz be kell jelentkezni
Up!
- A hozzászóláshoz be kell jelentkezni
PNM-et egyszeru" kiiratni:
fprintf(fw,"P6\x0a");
fprintf(fw,"%d %d\x0a",sx,sy);
fprintf(fw,"%d\x0a",255);
for ( i=0 ; i<sy ; i++ )
{ fwrite(outimg[i],sx*3,1,fw); }
fclose(fw);
Ahol
fw
a fopen()-nel megnyitott stream es/vagy stdout, outimg pedig egy unsigned char [sy][3*sx] meretu" tomb, amennyiben a ke'p me'rete sx * sy... ez egy binaris izet ir ki, melynek merete 3*sx*sy+keve's. Ez a kep szines, a tombben sorfolytonosan vannak az R, G es B komponensek, ebben a sorrendben, mindegyik unsigned char tipusu, 0-255 kozotti sza'm.
Ha fw = stdout, akkor a programod | pnmtobmp pipeline-nal tudsz csinalni bmp-t is (meg egyebkent barmi mast is).
C++-ra gondolom trivialisan atirhato a fenti ize.
Szerk: feketefeher is kiirhato, ebben az esetben a tomb unsigned char [sy][sx], az fwrite az csak sx,1 byte-ot ir ki es P6 helyett P5 kell az elso" sorban.
A.
- A hozzászóláshoz be kell jelentkezni
Akkor pnm-lesz. Köszi szépe. Aha a fenti cuccot már át tudom írni c++ra kösz méegyszer.
- A hozzászóláshoz be kell jelentkezni