Newsgroup: it.comp.lang.c++
Titolo: immagini

come posso caricare immagini bmp in c?

 come posso caricare immagini bmp in c?
Lo vuoi fare in C o in C++?
Comunque lo fai come faresti per ogni altro tipo di file, magari
specificando che e` un file binario (a seconda se lo stai facendo in C o in
C++ ci sono metodi diversi) per compatibilita` verso OS come Windows.
-- 
[ RiK0                                ]
[ non credo negli schemi non vincenti ]
[ two is an odd prime number          ]

 ha scritto nel messaggio 
news:phu6ku7fqi2w$.dlg@rikodespammed.com...


 mi potresti inviare un algoritmo funzionante?
Guarda che č banale. La tua mi sembra solo pigrizia.
Sai caricare in memoria il contenuto di un generico file? Spero di si.
Bene... poi cosa ci vuoi fare?
Premessa. Sono le due di notte. Io un programmino lo ho scritto, ma non
č praticamente nemmeno testato.
Per calcolare la dimensione del file, ci sono due modi. Se vuoi/puoi
usare una funzion non standard ANSI, ma POSIX, c'č stat. Tuttavia questa
soluzione di default č disabilitata. Visto che siamo in un gruppo su
ANSI C, conto semplicemente i caratteri.
Forse avrebbe potuto essere meglio invece di 'passare per il file due
volte' come faccio qui, prelevare N bytes alla volta e ogni volta
reallocare il buffer ( realloc() ).
O eventualmente avere un puntatore di puntatori... ma questa soluzione č
piů complessa... e non necessariamente ha grossi vantaggi.
Io, tanto per farci qualcosa, faccio un backup (anche se per limitarsi a
fare un backup, ci sarebbero stati modi piů furbini.
------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef POSIX
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#endif /* POSIX */
extern int errno;
int get_file_lenght(char* filename){
    int olderrno = errno;
#ifdef POSIX
    /* La funzione stat fa parte dello standard POSIX
     * NON e' ANSI C.
     */
    struct stat S;
    errno = 0;
    if ( stat(filename, &S) ){
        perror(NULL);
        errno = olderrno;
        return -1;
    }
    errno = olderrno;
    return S.st_size;
#else
    FILE* f= fopen(filename, "r");
    int size = 0;
    errno = 0;
    if (f == NULL){
        perror(NULL);
        errno = olderrno;
        return -1;
    }
    while( getc(f) != EOF)
        ++size;
    fclose(f);
    return size;
#endif /* POSIX */
}
 
 
int main(int argc, char *argv[]){
    char *filename = argv[1];
    char *buffer;
    char *bakname;
    int i, olderrno;
    int size = get_file_lenght(filename);
    FILE *f, *bak;
 
 
    f= fopen(filename, "rb");
    if (f == NULL){
        perror("Opening file: ");
        errno = olderrno;
        return 1;
    }
    buffer = (char*)malloc(size);
    printf("Read %d bytes\n", fread(buffer, 1, size, f));
    fclose(f);
 
        /* qui finisce quello che vuoi tu */
    bakname =(char*) malloc (strlen(filename) + 2;
    strncpy(bakname, filename, strlen(filename) )[strlen(filename)] =
'~';
    puts(bakname);
    bak = fopen(bakname, "wb");
    if (bak == NULL){
        perror("Backup copy: ");
        errno = olderrno;
        return 1;
    }
    printf("Wrote %d bytes\n", fwrite(buffer, 1, size, bak));
    fclose(bak);
 
    free(buffer);
    return 0;
 
}
-- 
RiK0
Non credo negli schemi non vincenti.

 vera e propria.
Per favore, spiega cosa significa per te "trasformarla in immagine vera e 
propria".
I linguaggi C/C++ non hanno alcuna nozione di cosa sia una "immagine" 
('bmp', "jpeg', o qualsiasi altro formato). 
Inoltre, se ti interessa il C, il NG appropriato è .it.comp.lang.c, anche 
se ho come la sensazione che il NG più adatto alla fine si scoprirà essere 
it.comp.programmare.win32.
Max