Frysning Skrevet 10. juli 2007 Skrevet 10. juli 2007 Hei! Jeg har lest om Bitmap, og vet sånn ca. hvordan den er bygget opp. Men hvordan kan jeg hoppe rundt i filen å laste de riktige verdiene inn i de riktige varibalene? Jeg lukter en struktur, og bruk av sizeof og & operatøren. Noen forslag?
Spartakus Skrevet 10. juli 2007 Skrevet 10. juli 2007 http://people.scs.fsu.edu/~burkardt/cpp_sr..._io/bmp_io.html http://www.vbforums.com/archive/index.php/t-261522.html Håper linkene er til hjelp
Frysning Skrevet 10. juli 2007 Forfatter Skrevet 10. juli 2007 De hjelper... Resten av programmet skal være i C++, begge linkene er C. Hvilken funksjoner/klasser bruker jeg i C++?
Spartakus Skrevet 10. juli 2007 Skrevet 10. juli 2007 Se i http://www.cplusplus.com/src/ der finner du denne fila: http://www.cplusplus.com/src/winbmp.zip Se også her: http://www.adp-gmbh.ch/win/programming/graphic/bitmap.html Vet ikke hvor relevant det er, orker ikke å lese C++ kode, får vondt i øya Jeg sier herved opp min stilling som Google-slaven din
Frysning Skrevet 10. juli 2007 Forfatter Skrevet 10. juli 2007 (endret) Hehe du skal nå ha takk iallefall. C++ kode er noe sjit, jeg er bare avhengig. Jeg har skrevet hello-world og har grunnleggende syntaks forståelse i de fleste språk, C++ er bare kjekt å kunne når man driver med reversing. (Strukturen på klassen etc) Edit: Jeg bruker linux, og vil helst at koden er fullstendig. (Ikke bygger på ferdige libs and stuff, kun bruk av STD) Endret 10. juli 2007 av Frysning
GeirGrusom Skrevet 11. juli 2007 Skrevet 11. juli 2007 Du kan rett og slett bare lese inn hele bitmap bildet i en blokk, og deretter sette strukturene som pekere i fila.
Frysning Skrevet 11. juli 2007 Forfatter Skrevet 11. juli 2007 Har du et eksempel? Hva er egentlig forskjellen på C-style lasting av filer, iforhold til C++?
GeirGrusom Skrevet 12. juli 2007 Skrevet 12. juli 2007 (endret) int size; // Størrelsen av hele fila char *arr; // Minneområdet for å holde på hele bitmap fila FILE *fp = fopen("minfil.bmp", "br"); // Åpne filen for binary access read fseek(fp, 0, SEEK_END); // Gå til slutten av fila size = ftell(fp); // Finn ut hvor slutten av fila er (dette er størrelsen) fseek(fp, 0, SEEK_SET); // Flytt tilbake til start arr = new char[size]; // Alloker minne fread(arr, 1, size, fp); // Les hele fila inn i minnet fclose(fp); // Lukk fila // Finn bitmapfileheader BITMAPFILEHEADER *hdr = (BITMAPFILEHEADER*)arr; // Finn bitmapinfoheader, som kommer rett etter bitmapfileheader BITMAPINFOHEADER *info = (BITMAPINFOHEADER)(arr + sizeof(BITMAPHEADER)); // Finn bildedata char *img_ptr = arr + hdr->bfOffBits; Nå inneholder hdr fil headeren, info inneholder informasjon om bildet, og img_ptr er pekeren til bildedata. Endret 12. juli 2007 av GeirGrusom
Giddion Skrevet 12. juli 2007 Skrevet 12. juli 2007 Ikke gjem å skjekke at dette stemmer da. info->biBitCount==24; info->biCompression != BI_RGB; info->biSize == sizeof(BITMAPINFOHEADER);
Frysning Skrevet 12. juli 2007 Forfatter Skrevet 12. juli 2007 Takk takk. Kombinert holder jeg på å lese om streams og file processing i boken også. Der brukes ifstream og ofstream så jeg antar at dette er C-style. As long as it works, who cares. xD
Dead_Rabbit Skrevet 15. juli 2007 Skrevet 15. juli 2007 Jepps, det stemmer. fread, fopen, freopen, osv. er C-style, og ifstream og ofstream er som du sier C++-style. fstream biblioteket er vel å foretrekke over C-alternativet, så jeg anbefaler deg å bruke dette så langt du kan.
GeirGrusom Skrevet 15. juli 2007 Skrevet 15. juli 2007 (endret) Jeg misliker STL, så jeg pleier som regel å foretrekke C bibliotekene :-P edit: eller bare gi blanke i C++ og bruke et mer egnet verktøy... Endret 15. juli 2007 av GeirGrusom
kjetil7 Skrevet 16. juli 2007 Skrevet 16. juli 2007 (endret) Hvis Windows er platformen din kan du like godt gjøre det enkelt å bruke GDI+. Da kan du klare deg med noen få linjer kode. Det finnes massevis av dokumentasjon og eksempler for hvordan du bruker GDI+. Et lite eksempel (hadde ikke kompilator tilgjengelig når jeg skrev dette...): #include <gdiplus.h> #include <memory> int main() { ULONG_PTR gdiplusToken; // init Gdiplus::GdiplusStartupInput gdiplusStartup; Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartup, NULL); // load bitmap std::auto_ptr<Gdiplus::Bitmap> bitmap(Gdiplus::Bitmap::FromFile( L"bitmap.jpg" ) ); // do something with bitmap ... // cleanup Gdiplus::GdiplusShutdown(m_gdiplusToken); } Endret 16. juli 2007 av kjetil7
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå