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
| #include <stdio.h>
#include "jpeglib.h"
#include "iostream"
#include "fstream"
int main(int argc, char* argv[])
{
struct jpeg_decompress_struct cinfo;
struct jpeg_error_mgr jerr;
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_decompress(&cinfo);
//mise d'un fichier jpeg en memoire
std::ifstream f(argv[1],std::ios::binary);
f.seekg (0, std::ios::end);
int fileSize = f.tellg();
f.seekg (0, std::ios::beg);
char* File = new char[fileSize];
f.read(File,fileSize);
f.close();
// fin mise d'un fichier jpeg en memoire
jpeg_stdio_src(&cinfo, (FILE*)File,fileSize);
jpeg_read_header(&cinfo, TRUE);
jpeg_start_decompress(&cinfo);
std::cout<<"Taille : "<<cinfo.output_height<<" "<<cinfo.output_width<<std::endl;
int h = cinfo.output_height;
int w = cinfo.output_width;
//ecriture du buffer dans une ppm
std::ofstream fout("test.ppm",std::ios::binary);
fout<<"P6"<<std::endl;
fout<<w<<" "<<h<<std::endl;
fout<<"255"<<std::endl;
unsigned char * buffer=new unsigned char[3*h*w];
for (int lCnt = 0;lCnt < cinfo.image_height;lCnt++ )
{
int SavePoint = lCnt * 3 * w;
unsigned char * buf = &buffer[SavePoint];
jpeg_read_scanlines( &cinfo, &buf, 1);
}
fout.write((char*)buffer,3*h*w);
f.close();
jpeg_finish_decompress(&cinfo);
return 0;
} |
Partager