|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Registered User
Iscritto dal: Oct 2006
Messaggi: 133
|
Lettura file BMP
ciao a tutti
devo fare un programma in ANSI C che legga il contenuto di un file bitmap a 8 bit e lo scriva su un altro file bitmap modificandone alcuni campi Per leggere il file uso la funzione fread ma purtroppo quando provo a stampare ciò che viene letto nel file ( ad esempio cerco di stampare il campo offset dell'header del file) mi vengono stampati numeri strani tipo -10854545 oppure 65990 qualcuno sa darmi una mano? grazie |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
dipende dal formato del BMP ke vuoi leggere.... Se è un BMP ad 8 bit (256 colori) ogni byte rappresenta il valore del colore della palette in quel punto.... ovviamente devi saltare un bel pò di byte all'inizio del file xkè se non sbaglio viene codificata la palette... Se utilizzi BMP a 24 bit allora avrai 3 valori da 1BYTE x ogni colore.. se non erro è utilizzato lo standard BRG al posto del + comune RGB...infatti ricordo ke quando ai tempi avevo fatto un visualizzatore di BMP/TIFF/TGA mi uscivano tutti i colori sballati ![]() cmq ti consiglio di leggere le specifike del formato BMP e di non andare a caso km ho fatto io ai tempi con un editor esadecimale ![]() X quanto riguarda i numeri strani ke ti stampa immagino sia proprio l'errata interpretazione ke dai a quei byte in quanto immagino li stai leggendo come se fossero signed int anzikè interpretarli byte x byte
__________________
|
|
|
|
|
|
|
#3 |
|
Registered User
Iscritto dal: Oct 2006
Messaggi: 133
|
il formato di una immagine bitmap a 8 bit è:
1) File header (14 byte) 2) Information header (40 byte) 3) palette (1024 byte) 4) image data ( altezza * larghezza in byte ) poi il file header ha diversi campi 1) bitmap file type (2 byte): due caratteri (“B” e “M”) di 1 byte ciascuno 2) bitmap file size (4 byte): valore che contiene la lunghezza del file bitmap in byte ecc allora io ho usato la fread nel seguente modo: typedef struct { // ho messo solo questo campo per l'esempio unsigned int LunghezzaFile; } BMPHeader; int main(void) { unsigned int *LunghezzaFile; unsigned int *Altezza; BMPHeader *b_header; FILE *fp; if ((fp = fopen("lago.bmp","rb")) == NULL) printf("errore"); char B = getc(fp); char M = getc(fp); fread(&b_header, sizeof(unsigned int), 1 , fp); printf("%d \n ", &b_header->LunghezzaFile); fclose(fp); return (0); } dovrebbe stamparmi la lunghezza del file ma invece mi stampa 65990 che nn credo sia la lunghezza del file in byte |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
come puoi vedere dall'allegato a me convertendo dall'offset 2h all'offset 5h in int (kiamato long int dall'editor hex) mi restituisce correttamente 65978 ke è la dimensione del file bolle di sapone.bmp ke puoi trovare sotto la cartella windows
Ora è da vari anni ke nn leggo file col c... (circa da quando ho scritto il visualizzatore di cui sopra ) qdi... a scanso di equivoci..guardati 'sta paginetta ke mi sa ke fa al caso tuo http://local.wasp.uwa.edu.au/~pbourke/dataformats/bmp/ io ora mi sa ke stakko
__________________
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
![]() appunto uno dei vari motivi x cui mi sta un pò sulle bolls il C ![]() figurati se me ne accorgevo io a quest'ora arrugginito come sono ![]() almeno in java esiste solo il passaggio x copia del riferimento ke mi semplifica notevolmente la vita ![]() e dopo questa vi saluto davvero AUGH!
__________________
|
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19149
|
secondo voi per quale motivo i BMP sono memorizzati alla rovescia? per la miseria...
comunque se cerchi "BMP header" con google il primo o secondo risultato ha già la descrizione dettagliata dei campi e della loro dimensione. scrivere un programma che lo legga è semplicissimo, manipolare l'immagine e convertirla un po' meno, meglio se non ci penso
|
|
|
|
|
|
#8 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() http://msdn.microsoft.com/library/de...asp?frame=true |
|
|
|
|
|
|
#9 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
|
#10 | ||
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
http://msdn.microsoft.com/library/de...asp?frame=true Quote:
|
||
|
|
|
|
|
#11 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
|
#12 |
|
Registered User
Iscritto dal: Oct 2006
Messaggi: 133
|
ok grazie dell'aiuto ora provo a lavorare con il materiale che mi avete dato
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#14 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19149
|
Quote:
|
|
|
|
|
|
|
#17 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
|
#18 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
|
#19 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19149
|
Quote:
dopotutto a me serve l'header, c'è un sito con una tabellina e tanto basta. la documentazione M$ a onor del vero è scritta bene e quando programmi per windows la usi e sei pure felice perché c'è tutto! io sviluppo in linux, tra l'altro ho abbandonato il BMP per passare al PNM ma non per odio verso la Microsoft, proprio per quella rappresentazione rovesciata del bitmap che rende scomodo lavorarci. come se non bastasse di default le immagini BMP bianco e nero hanno bit 1 per il bianco e 0 per il nero, altra cosa che concettualmente mi fa arrabbiare |
|
|
|
|
|
|
#20 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
OT: ma che cazzo succede, alcune parole sono sottolineate due volte e mostrano della pubblicità merdosa...
![]() ma che avete combinato
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:59.






















