Newsgroup: it.comp.lang.c
Titolo: Elaborare immagini in C

Salve...
Ho urgente bisogno di codice e/o documentazione per la visualizzazione  di
immagini bitmap o di qualsiasi altro formato in linguaggio C/C++,
es.. come si legge un file bitmap,e visualizzarlo..
    ...modificare l'immaggine...ecc...
grazie per l'attenzione..
                                        daniele

Un bel di' Daniele F scrisse:
DF> Salve...
DF> 
DF> Ho urgente bisogno di codice e/o documentazione per la visualizzazione  di
DF> immagini bitmap o di qualsiasi altro formato in linguaggio C/C++,
DF> es.. come si legge un file bitmap,e visualizzarlo..
DF>     ...modificare l'immaggine...ecc...
DF> 
Voila':
struct epic {
        BYTE *buf;
        int lx;
        int ly;
};
struct bmp_head {
        WORD    Magic;
        DWORD   FileSize;
        WORD    r1;
        WORD    r2;
        DWORD   Offset;
};
struct bmp_info {
        DWORD    headsize;
        DWORD   lx;
        DWORD   ly;
        WORD    plane;
        WORD    bpp;
        DWORD   compression;
        DWORD   bmpsize;
        DWORD   hres;
        DWORD   vres;
        DWORD   col_used;
        DWORD   col_sign;
};
struct bmp_rgb {
        BYTE blue;
        BYTE green;
        BYTE red;
        BYTE res;
};
void load_bmp (char *nfile, struct epic *pic) {
        FILE *fb;                       /* file pointer */
        struct bmp_head bhead;          /* struct for BMP's header */
        struct bmp_info binfo;          /* struct for BMP's infos */
        struct bmp_rgb pal[256];        /* struct for BMP's palette */
        int x, y, lx;
        BYTE col;
        if ( !(fb = fopen(nfile, "r+b"))) {
                fprintf(stderr, "Error: file not found!\n");
                exit(1);
        }
        /* read BMP's header form file */
        fread (&bhead.Magic, sizeof(bhead.Magic), 1, fb);
        if (bhead.Magic != 0x4d42) {
                fprintf(stderr, "Error: file is not a valid BitMap!\n");
                exit(1);
        }
        fread (&bhead.FileSize, sizeof(bhead.FileSize), 1, fb);
        fread (&bhead.r1, sizeof(bhead.r1), 1, fb);
        fread (&bhead.r2, sizeof(bhead.r2), 1, fb);
        fread (&bhead.Offset, sizeof(bhead.Offset), 1, fb);
        /* read BMP's infos and palette from file */
        fread (&binfo, sizeof(binfo), 1, fb);
        fread (pal, sizeof(struct bmp_rgb), 256, fb);
        /* move file pointer to colours offset */
        if (fseek(fb, bhead.Offset, SEEK_SET)) {
                fprintf(stderr, "Error: fseek cannot find offset!\n");
                exit(1);
        }
        for (lx = 0; lx < binfo.lx; lx+=4);
        /* alloc memory for epic's buffer */
        pic->buf = (BYTE*) malloc (
binfo.ly
 * binfo.lx);
        if (!pic->buf) {
                fprintf(stderr, "Error: insufficient memory!\n");
                exit (1);
        }
        pic->lx = binfo.lx;
        pic->ly = 
binfo.ly
;
        /* copy BMP in epic image */
        for (y = 
binfo.ly
 - 1; y >= 0; y--)
                for (x = 0; x < lx; x++) {
                        if (x < binfo.lx) {
                                fread (&col, 1, 1, fb);
                                *(pic->buf + x + binfo.lx * y) = col;
                        }
                        else fread (&col, 1, 1, fb);
                }
        /* close file pointer and exit function */
        fclose(fb);
}
-- 
Emanuele Cesena		
http://www.geocities.com/SiliconValley/Grid/8879
ami...@iol.it
 :)			 Occhio all'antispammer NOSPAZ!!
Scaricate ora Bubble 2000, ver. beta 1 :-)
http://gpi.eden.it/italianware/games/b2000b1.exe
 (900kb, ma il server e' buono!)
"Le questioni futili vengono immediatamente risolte; quelle importanti mai",
legge di Gresham

Un bel di' Ema da TIN scrisse:
DF>> 
EdT> Voila':
EdT> 
ah, funziona solo per i BMP 2.0 (?), ed a 256 colori :-)
Per gli altri nonzo... :-)
bye!
-- 
Emanuele Cesena		
http://www.geocities.com/SiliconValley/Grid/8879
ami...@iol.it
 :)			 Occhio all'antispammer NOSPAZ!!
Scaricate ora Bubble 2000, ver. beta 1 :-)
http://gpi.eden.it/italianware/games/b2000b1.exe
 (900kb, ma il server e' buono!)
"Se c'e' una maniera di rimandare una decisione importante, la buona
burocrazia, pubblica o privata, la trovera'", quinta legge di Parkinson

     ...modificare l'immaggine...ecc...
per Unix esistono le librerie gif/jpeg che ti danno anche delle API
richiamabili da C/C++. Se poi vuoi studiare il metodo con cui le immagini
sono create e' meglio che ti compri un libro sui formati grafici...
ciaoz
Ho talmente fame che il mio stomaco fa tutt'uno con la spina dorsale
--
Michel <ZioBudda> Morelli		  
mic...@michel.enter.it
 
http://ziobudda.enter.it
Problemi con Linux ?    mailto:
li...@saturn.media.dsi.unimi.it