Ouverture image jpg avec ifstream
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:
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:
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:
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