bon j'en suis venu a bout en java,

je vous laisse le code source d'un rtf exemple et la partie du bloc rtf contenant les tags pour afficher une image BMP commenté
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
{\rtf1\fbidis\ansi\ansicpg1252\deff0{\fonttbl{\f0\fswiss\fcharset0 Arial;}{\f1\froman\fcharset0 Times New Roman;}}
{\*\generator Msftedit 5.41.15.1507;}\viewkind4\uc1\pard\ltrpar\sl320\slmult0\lang1036\f0\fs20
{\pict\wmetafile8\picwgoal480\pichgoal480 
010009000003380600000000220600000000050000000b0200000000050000000c022000200022
060000430f2000cc00000020002000000000002000200000000000280000002000000020000000
0100180000000000000c000000000000000000000000000000000000000000000000000000ffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000
00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ff000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ff000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000
00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ff000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff0000
00000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff000000000000ffff
ffffffffffffff000000000000000000000000000000000000000000000000000000ffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000
00000000ffffffffffffffffff0000000000000000000000000000000000000000000000000000
00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff0000000000
00ffffffffffff000000000000ffffffffffff000000000000000000ffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000
00ffffffffffffffffffffffffffffff000000000000ffffffffffffffffff0000000000000000
00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffff000000ffffff000000ffffffffffffffffffffffffffffffffffff0000
00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000ffff
ffffffffffffffffffffffffffffffffffffff000000000000ffffff0000000000000000000000
00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff
ff000000000000000000000000000000000000000000000000000000ffffffffffffffffffffff
ffffffffffffffffffffffffffffffff000000000000000000000000ffffffffffffffffffffff
ffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000
00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000
00000000000000000000000000000000000000000000000000000000000000000000ffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffff000000000000000000000000000000ffffffffffffffffffffffffffff
ff000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000ffff
ffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffff000000000000000000000000ffffffffffff0000000000000000000000000000000000
00ffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff0000
00000000000000000000000000000000000000000000000000ffffff000000ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ff000000000000000000ffffffffffff000000000000000000000000ffffffffffff0000000000
00000000ffffff000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffff000000000000000000ffffff0000000000000000
00ffffff000000000000000000000000000000000000ffffff000000ffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
00000000000000ffffff000000000000000000ffffff000000000000000000ffffff000000ffff
ff000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000ffff
ff000000ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
00000000000000ffffff0000000000000000000000000000000000000000000000000000000000
00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffff000000000000000000ffffffffffff0000000000000000
00000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000
00000000000000000000000000ffffffffffffffffff000000000000000000ffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000
00000000000000ffffffffffffffffffffffff030000000000
}
\par
}
le bloc wmf etant composé comme ceci (possibilité que ce bloc ne corresponde pas exactement a celui du fichier ci dessus je n'ai pas retrouver tout mes fichiers de test, mais le principal est la):
tag \pict (cf la doc rtf) et ses parametres
bloc wmf
entete
suivit d'une liste de fonctions GDI (l'api microsoft) dans l'exemple elles sont:
* SetWindowOrg
* SetWindowExt
* StretchDIBits

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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
{\pict\wmetafile8\picw480\pich480\picwgoal480\pichgoal480 
0100 		//file type 1=memory
0900		//header size always = 9
0003 		//version of Ms Windows used
38060000 	//total size of metafile
0000 		//number of object in file
22060000	//size of largest record in word
0000		//not used always = 0
---
05000000 //taille du record (5) en WORDs
0b02	//SetWindowOrg (definit le point d'origine)
0000	//param 1
0000	//param 2
---
05000000 //taille du record (5) en WORDs
0c02	//SetWindowExt tells the DC that a rectangle with the LOGICAL width and height passed in
4e03	//846
4e03	//846
---
22060000//taille du record (1570) en WORDs
430f	//StretchDIBits	
2000cc00 //ROP constant code SRCCOPY 'raster operation code'
0000	//usage
2000	//src H
2000	//src W
0000	//src X
0000	//src Y
4e03	//dst H
4e03	//dst W
0000	//dst X
0000	//dst Y
------------------ bitmap header (on saute les 10 premiers octets)
28000000	//40 sizeof bitmapinfoheader
20000000	//image width
20000000	//image height
0100		//number of planes
1800		//color depth
00000000	//compression type
000c0000	//sizeof image data
c40e0000	//hres in pixel per meter
c40e0000	//vres in pixel per meter
00000000	//nb of color in image or 0
00000000	//number of important colors or 0
------------------ bitmap data
000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000ffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000ffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff000000000000ffffffffffffffffff000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffff000000000000ffffffffffff000000000000ffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffff000000000000ffffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff000000ffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffff000000000000ffffff000000000000000000000000000000ffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff
ffffffffffffffffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000ffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000ffffffffffffffffffffffffffffff000000000000000000000000ffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000ffffffffffff000000000000000000000000000000000000ffffffffffff000000000000
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000ffffff000000000000000000000000000000000000000000000000000000ffffff000000
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff000000000000000000000000ffffffffffff000000000000000000ffffff000000
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff000000000000000000ffffff000000000000000000000000000000000000ffffff000000
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff000000000000000000ffffff000000000000000000ffffff000000ffffff000000000000
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000ffffff000000ffffffffffffffffff000000000000000000000000
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffff000000000000000000000000000000000000000000000000000000000000000000
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000ffffffffffff000000000000000000000000000000000000000000000000000000ffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000ffffffffffffffffff000000000000000000ffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff

03000000 //The last record in every metafile always has a function number of 0000h, 
0000	 //a Size of 0003h, and no Parameters array. This record is used to indicate 
 	 //the end of the record data in the metafile. The use of this terminator record 
	 //is missing from the original WMF description found in the Windows SDK and is now 
	 //documented in article Q99334 of the Microsoft Knowledge Base.
}
notes:
en plusieurs sont utilisé des paramètres de tailles qui sont pour le moin déroutantes. voici les explications (sachant que l'image a la base doit faire 32x32 si mes souvenirs sont bon)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
\picw480\pich480\picwgoal480\pichgoal480
pour trouver cette valeur j'ai utiliser la formule suivante
x = taille*k; ou k = 15 (c'est la valeur du scale WMF retrouvée par calcul et comparaison, modulo les arrondis ca fonctionne bien)

voila il ne reste plus qu'a recreer le necessaire pour reecrire tout cela dans l'ordre.
si vous avez besoin de plus d'infos n'hésitez pas