Bonjour à tous,

Je me heurte à un problème d'ouverture de fichier jpg sans avoir pu trouver une réponse sur la faq ni sur la toile, j'ai pourtant respecté les conseils donnés mais en vain. J'ai crée une classe Frame qui contiendra les données relatives à une image . Comme je suis encore débutant il y a surement des maladresses dans la rédaction du code.

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
#ifndef _Frame_h_          
#define _Frame_h_
 
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
 
using namespace std;
 
class Frame {
public:
 
	// Constructor
	Frame();
	Frame(string filename,int lignes, int colonnes);
 
	// Destructor
	~Frame() { }
 
	// Getter
	const float get_pixel(int i) const;
 
 
private:
	// Attributs
	string namefile;
	vector<float> frame;
	int nb_lignes;
	int nb_colonnes;
 
	//Load image
	void load_image(const string& filename, int lignes, int colonnes);
 
 
};
 
#endif
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
#include "Frame.h"
 
Frame::Frame()
	: namefile(), frame(), nb_lignes(0), nb_colonnes(0) { }
 
Frame::Frame(string filename,int lignes, int colonnes)
	: namefile(filename), nb_lignes(lignes), nb_colonnes(colonnes)
{
	load_image(namefile,nb_lignes,nb_colonnes);
}
 
void Frame::load_image(const string& filename, int lignes, int colonnes)
{
	ifstream is;
	int length=lignes*colonnes;
	is.open(filename,ios::binary|ios_base::in);
	unsigned char *image = new unsigned char[length];
	is.read((char*)image,length);
 
	for (int i=0;i<length;i++){
		frame.push_back((float)image[i]);
		if (i<10)
			cout <<(float)image[i] << endl;
	}
	delete[] image;
	is.close();
 
}
 
//Getter
 
const float Frame::get_pixel(int i) const{
	return frame[i];
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
#include "Frame.h"
 
const int nombre_ligne=512;
const int nombre_col=512;
 
int main(){
	string file_name="Lena.jpg";
 
	Frame temp(file_name,nombre_ligne,nombre_col);
 
	for (int i=0;i<1000;i++)
		cout << temp.get_pixel(10000+i) << endl;
}
L'image est bien chargé, cependant la valeur de chaque niveau de gris est constante sur tout le vecteur et vaut 205. Quelqu'un pourrait-il m'éclairer là dessus ? L'image en question est celle-ci : http://digital.cs.usu.edu/~mjiang/cs...g2008/Lena.jpg