Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    80

    [C++] Scrivere immagine bitmap su un file binario

    Ciao a tutti,
    devo scrivere un'immagine bitmap su di un file binario. Il codice che utlizzo è questo:

    codice:
    for(int j=0; j < v.values.n_textures_imgs; j++) file.write((char*)&v.img[j], sizeof(GLuint));
    dove l'array img è una variabile di tipo GLuint. Quello che sto salvando sul file sarebbero le coordinate di un modello 3D con tanto di texture, solitamente per caricare delle immagini io le salvo su delle variabili GLuint, però nel caricamento il modello mi appare senza texture.
    Devo forse salvare le immagini in un modo diverso?

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    80
    Nessuno lo sa?
    Ma si può almeno?

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Il codice non è leggibile (è su una sola linea ...), non si sa cosa sia v, non si sa come rileggi i valori ... insomma, se nessuno ti ha risposto ancora molto probabilmente è perché le informazioni fornite non sono sufficienti ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    80
    Già hai ragione...
    Allora: v è una struttura contenente tutte le variabili della classe del modello (da me creata).
    Riscrivo meglio il codice.
    codice:
    /* SCRITTURA
    v: struttura contenente le variabili di una classe per salvare i dati di un modello 3D
    values: struttura contenente il numero di vertici del poligono, delle normali ecc..
    n_textures_img: numero di texture presente nel poligono
    img: array di tipo GLuint in cui vengono caricate le immagini
    */
    for(int i=0; i < v.values.n_textures_imgs; i++){
         file.write((char*)&v.img[i], sizeof(GLuint));
    }
    
    //LETTURA
    // i tipi delle variabili sono gli stessi
    for(int i=0; i < v.values.n_textures_imgs; i++){
         file.read((char*)&v.img[i], sizeof(GLuint));
    }
    Si capisce meglio così?

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Per scrivere basterebbe

    file.write((char*)v.img, v.values.n_textures_imgs * sizeof(GLuint));

    ma per leggere, come fai ad usare il valore

    v.values.n_textures_imgs

    se non sai quanti sono gli elementi da leggere?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    80
    Beh logicamente prima leggo la struttura values e poi tutto il resto.
    Comunque non penso basterebbe fare così in quanto img è un puntatore!
    codice:
    GLuint *img;
    //una volta che si conosce il numero delle texture..
    img = new GLuint[values.n_textures_img];
    //è scritto così perchè il codice si trova all'interno della classe e la struttura 
    values è presente per ogni oggetto
    Si può fare lo stesso? Comunque è giusto salvarle così le immagini? Ora posto la funzione che uso per caricarle.
    codice:
    AUX_RGBImageRec *LoadBMP(char *filename){
        FILE *file=NULL;
        if(!filename){
            return NULL;
        }
        file=fopen(filename,"r");
        if(file){
            fclose(file);
            return auxDIBImageLoad(filename);
        }
        return NULL;
    }
    
    int LoadGLTextures(char *bmp, GLuint texture[], int id){
        int status=FALSE;
        AUX_RGBImageRec *textureImage[1];
        memset(textureImage,0,sizeof(void *)*1);
        if(textureImage[0]=LoadBMP(bmp)){
            status=TRUE;
            glGenTextures(3,&texture[id]);
            glBindTexture(GL_TEXTURE_2D, texture[id]);
            glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
            glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
            glTexImage2D(GL_TEXTURE_2D, 0, 3, textureImage[0]->sizeX, textureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, textureImage[0]->data);
        }
    
        if(textureImage[0]){
            if(textureImage[0]->data){
                free(textureImage[0]->data);
            }
            free(textureImage[0]);
        }
    
        return status;
    }
    La funzione che viene richiamata è LoadGLTextures con parametri il nome del file, l'array img e la locazione in cui salvarci la texture.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    80
    Ma allora è giusto come ho cercato di scrivere io l'immagine o no?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.