je veux pouvoir par un programme c/c++ parcourir un fichier jpg en sachant bien ou je me trouve pour pouvoir faire des modifications.
sur le net la doc est assez rare. j'ai trouvé quelque, mais ça me semble bien compliqué.
moi ce que je veux c'est pouvoir distinguer les différentes partie d'un fichier jpg et apporter des modification de bit au niveau de la partie image elle.

voici un peu ce que j'ai trouvé sur les jpg.
Organisation d’un fichier JEPG.

Les données de JPEG et de JFIF sont des flots d’octets, stockant toujours des valeurs de 16 bits de mot dans le grand-endian format. Des données de JPEG en général sont stockées comme un flot de bloc, et chaque bloc est identifié par une valeur de marqueur. Les deux premiers octets de chaque flot de JPEG sont le début des valeurs FFh D8h de marqueur de l'image (SOI). Dans un fichier JFIF-conforme il y a un marqueur de JFIF APP0 (application), juste après le SOI, qui comprend les éléments de code de marqueur FFh E0h et les caractères JFIF dans les données de marqueur, comme décrit dans la prochaine section. En plus du segment de marqueur de JFIF, il peut y avoir un ou plusieurs segments facultatifs de marqueur de prolongation de JFIF, suivis des données d'image réelles.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
NOMS	MARQUEUR           DESCRIPTION
M_SOI 	0xff 0xd8              Début du fichier (magic number)
M_APP0 	0xff 0xe0             Segment Application.
….	….	….	Divers segments suivent...
M_SOS 	0xff 0xda              Limage commence ici.
M_EOI  	0xff 0xd9	             Limage prend fin ici. Le fichier aussi.
bien que cela me semble encore flou. si quelqu'un a un tuto dessus MERCI


voici un code de test, mais on dirai que le programme ne passe jamais par 0xda qui marque le début de l'image. le code est sensé ouvrir un fichier jpg en lecture le recopier sous un autre noms et modifier le contenu de la partie image(juste pour voir ce que ça donne). normalement un logiciel d'image devrai l'ouvrir sans problème si tout c'est bien passé.
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
 
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <ios>
 
using namespace std;
 
int main(){
	char ch;
	const int t=1;
	int i;
	cin>>i;
	cout.setf(ios_base :: hex ,ios_base :: basefield ); // hexadecimal
	cout<<i <<endl;
	ifstream myInfile("p2.jpg", ios::in | ios::binary);
	if(!myInfile){
	   	cout<<"Le fichier d'entrée n'existe pas";
	   	exit(-1);
	}
	ofstream myOutfile("d.jpg", ios::out| ios::binary);
	if(!myOutfile){
		   	cout<<"Le fichier n'a pas pu être crée";
		   	exit(-1);
	}
	int begin=0;
	while(1) {
	    myInfile.read(&ch,t);
	    cout.setf(ios_base :: hex, ios_base :: basefield );
	    cout.setf(ios_base :: hex ,ios_base :: basefield ); // hexadecimal
	    cout <<(short)ch ;// " - "<<ch <<endl;
	    if((short)ch==0xda) begin=1;
	    cout.setf(ios_base :: dec);
	    cout << " - "<<(short)ch <<endl;
	    if(begin==1)myOutfile.write("1",1);
	    if(0 == myInfile.gcount()) break; 	   
	}
	myInfile.close();
             myOutfile.close();
 
}
merci pour votre aide!