Bonjour

J'ai un problème concernant la lecture d'un fichier image que j'ai sauvé en C++
En fait j'obtien ceci:

L'image de départ est bienentendu à droite

Je sauve l'image comme ca:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
    ofstream file( LDEstc(filename) );
    file.write( (char*)&m_width, sizeof(LDEuint) ); // largeur
    file.write( (char*)&m_height, sizeof(LDEuint) ); // hauteur
    file.write( (char*)&m_bpp, sizeof(LDEuint) ); // bpp
    file.write(reinterpret_cast<char*>(m_data), m_bpp*m_width*m_height ); // le data
Ensuite je fais ma lecture ainsi:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#define LDET_NO_FILTER 0
#define LDET_LINEAR 1
#define LDET_BILINEAR 2
#define LDET_TRILINEAR 3
#define LDET_ANISOTROPIC 4
 
struct LDEldet
{
    LDEboolean *data;
	LDEuint h, w, bpp;
	string name;
 
    void load(string path, LDEuint & id, LDEuint mode )
    {
        name = path;
        ifstream file( LDEstc(path) );
        file.read( (char*)&w, sizeof(LDEuint) );
        file.read( (char*)&h, sizeof(LDEuint) );
        file.read( (char*)&bpp, sizeof(LDEuint) );
        data = new LDEboolean[ bpp*w*h ];
        file.read(reinterpret_cast<char*>(data), bpp*w*h );
 
        glGenTextures(1, &id);
        glBindTexture(GL_TEXTURE_2D,id);
        gluBuild2DMipmaps(GL_TEXTURE_2D,
                          bpp,    // bpp
                          w,      // largeur
                          h,      // hauteur
                          (bpp == 3 ? GL_RGB : GL_RGBA), // type
                          GL_UNSIGNED_BYTE, //
                          data);
 
        free(data); // close our data
 
        // filter
        switch ( mode )
        {
            case LDET_NO_FILTER:
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
            break;
 
            case LDET_LINEAR:
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
            break;
 
            case LDET_BILINEAR:
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
            break;
 
            case LDET_TRILINEAR:
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);
            break;
 
        #ifdef GL_TEXTURE_MAX_ANISOTROPY_EXT
            case LDET_ANISOTROPIC:
            glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 2.0f);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
            break;
        #endif
        }
        glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
    }
};
L'image de départ c'est une .tga, et des fois ca passe bien la lecture/sauvegarde/relecture ^^ quand elle est genre 128*128pixels, même avec alpha.

Mais voila dans la pluspart des cas j'ai ce genre de resultat, que devrais-je faire?
Par avance, merci!