Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix
Un proiettore economico, che fa della portabilità e immediatezza i suoi punti di forza. Adatto per una camera da letto o per la casa vacanze, è basato su sistema proprietario Linux ma offre piena compatibilità ufficiale a Netflix
ASUS ProArt GoPro Edition è il notebook compatto per chi crea
ASUS ProArt GoPro Edition è il notebook compatto per chi crea
Un notebook sviluppato in collaborazione con GoPro ma che risponde al meglio alle necessità di tutti coloro che creano contenuti video: robustezza, design, potenza di calcolo e funzionalità si abbinano al meglio tra di loro, pur se a prezzo di un costo elevato per via della tanta memoria onboard
Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090
Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090
Ho affidato ai due modelli lo stesso mestiere ma non lo stesso identico prompt: trasformare una storia illustrata in un video usando una RTX 3090 e modelli locali. Ne sono usciti due film, due applicazioni e due idee opposte di efficienza. Fucina, progettata con Fable 5, colpisce di più nei primi secondi. Storyboard Studio, costruito con ChatGPT/Codex, regge meglio sulla distanza e vince il confronto complessivo, ma di stretta misura
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-12-2006, 20:15   #1
russo30
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
russo30 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2006, 20:45   #2
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
Quote:
Originariamente inviato da russo30
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
ehm...
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
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2006, 22:09   #3
russo30
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
russo30 è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2006, 22:45   #4
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
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
Immagini allegate
File Type: png Immagine.PNG (13.0 KB, 8 visite)
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2006, 22:53   #5
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da russo30
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(BMPHeader), 1 , fp);
printf("%d \n ", b_header.LunghezzaFile);
Hai un po' confusione fra puntatori e &...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 18-12-2006, 22:56   #6
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
Quote:
Originariamente inviato da cionci
Hai un po' confusione fra puntatori e &...

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!
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2006, 00:06   #7
recoil
Senior Member
 
L'Avatar di recoil
 
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19149
secondo voi per quale motivo i BMP sono memorizzati alla rovescia? per la miseria... non so se quelli OS/2 sono come quelli di Windows, ma è una cosa che concettualmente trovo fastidiosa...

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
recoil è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2006, 08:54   #8
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da recoil
comunque se cerchi "BMP header" con google il primo o secondo risultato ha già la descrizione dettagliata dei campi e della loro dimensione.
vorrei tanto sapere perché la gente va a cercare documentazione scrausa e non ufficiale quando esiste quella completa e ufficiale...

http://msdn.microsoft.com/library/de...asp?frame=true
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2006, 08:56   #9
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da russo30
qualcuno sa darmi una mano?
caricalo con LoadImage, così già un problema l'hai fatto fuori. per convertirlo usa le funzioni della GDI, inutile che lo fai a mano. se aspetti un attimo ti cerco qualche funzione che ti può essere utile...
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2006, 08:59   #10
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da 71104
se aspetti un attimo ti cerco qualche funzione che ti può essere utile...
eccoci qua:
http://msdn.microsoft.com/library/de...asp?frame=true
Quote:
Originariamente inviato da MSDN
If the color formats of the source and destination device contexts do not match, the BitBlt function converts the source color format to match the destination format.
non hai che da creare un Memory Device Context col formato in cui vuoi convertire quel bitmap, disegnarcelo con BitBlt, e salvarlo su file.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2006, 09:02   #11
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da russo30
dovrebbe stamparmi la lunghezza del file ma invece mi stampa 65990 che nn credo sia la lunghezza del file in byte
ma controllare no eh...?
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2006, 09:25   #12
russo30
Registered User
 
Iscritto dal: Oct 2006
Messaggi: 133
ok grazie dell'aiuto ora provo a lavorare con il materiale che mi avete dato
russo30 è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2006, 09:32   #13
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da 71104
caricalo con LoadImage, così già un problema l'hai fatto fuori. per convertirlo usa le funzioni della GDI, inutile che lo fai a mano. se aspetti un attimo ti cerco qualche funzione che ti può essere utile...
C'e' scritto sopra che deve usare ANSI C
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2006, 09:47   #14
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da cionci
C'e' scritto sopra che deve usare ANSI C
giusto, quindi deve linkare gdi32.lib dalla command line del linker e non con #pragma comment
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2006, 09:57   #15
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da 71104
giusto, quindi deve linkare gdi32.lib dalla command line del linker e non con #pragma comment
Penso nel senso che sia obbligato ad usare la libreria standard....
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2006, 11:08   #16
recoil
Senior Member
 
L'Avatar di recoil
 
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19149
Quote:
Originariamente inviato da 71104
vorrei tanto sapere perché la gente va a cercare documentazione scrausa e non ufficiale quando esiste quella completa e ufficiale...

http://msdn.microsoft.com/library/de...asp?frame=true
sono allergico al sito Micro$oft
recoil è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2006, 11:10   #17
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da recoil
sono allergico al sito Micro$oft
si, e dopodiché i programmi fanno cagare
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2006, 11:11   #18
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da cionci
Penso nel senso che sia obbligato ad usare la libreria standard....
cioè non ci credo, mi hai preso sul serio!!
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2006, 11:17   #19
recoil
Senior Member
 
L'Avatar di recoil
 
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19149
Quote:
Originariamente inviato da 71104
si, e dopodiché i programmi fanno cagare
no perché?
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
recoil è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2006, 13:36   #20
71104
Bannato
 
L'Avatar di 71104
 
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
71104 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix HONOR CHOICE Projector Air Pro: piccolo, portati...
ASUS ProArt GoPro Edition è il notebook compatto per chi crea ASUS ProArt GoPro Edition è il notebook c...
Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090 Fable e Sol a confronto: due cartoni animati cre...
Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile Il tablet rugged leggero e sottile: Lenovo Think...
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot AMD Advancing AI 2026: l'hardware AMD per le ela...
BYD, boom in Giappone: la sua prima kei ...
L'Europa mette sul piatto 1,5 miliardi d...
Google dichiara risolto il bug della bat...
Intel apre i segreti dei chip Atom a una...
FC 27 stravolgerà il gameplay: me...
Microsoft conferma la super app Copilot:...
Svolta per il vaccino anti-HIV: team ann...
Il governo USA 'compra' una quota di Glo...
Veeam offre supporto a sei nuovi hypervi...
WINDTRE BUSINESS apre alle imprese il da...
DEF CON vieta gli occhiali smart da 'per...
Keychron annuncia ZGM, il primo firmware...
Zuckerberg prevede miliardi di agenti IA...
Benzina sempre più cara, boom di ...
DualSense White a 59,99€: il controller ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 21:59.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v