Bonsoir à tous,
Je suis confronté au problème suivant lors de la conversion de grandes images emf vers jpg, j'obtiens une erreur endofressources:
Pour réaliser cela, étant donné qu'il n'est pas possible de dessiner directement dans le jpg (il ne possède pas de canvas), j'utilise un bitmap intermédiaire suivant le code ci-dessous:
Mes questions:
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 try MF := tmetafile.Create; MF.Enhanced := true; MF.Width := largeur; MF.Height := hauteur; MFcvs := TMetaFileCanvas.Create(mf, 0); //crée un canvas metafile fGraph.Dessine(mfcvs, positionLeft, positionTop); //dessine dans le metafilecanvas MFcvs .Free; //libère le mfcanvas et transfere dans metafile if MF <> nil then begin sExt := ExtractFileExt(sNomFich); //récupère le format de fichier désiré if (sExt = '.bmp') or (sExt = '.jpg') then begin bmp := TBitmap.Create; try bmp.PixelFormat := pf24bit; bmp.Width := mf.Width; bmp.Height := mf.Height; bmp.Canvas.Draw(0, 0, mf); if (sExt = '.bmp') then bmp.SaveToFile(sNomFich); if (sExt = '.jpg') then begin JPEG := TJPEGImage.Create; try JPEG.CompressionQuality := JpegCompr; JPEG.Assign(bmp); JPEG.JPEGNeeded; JPEG.SaveToFile(sNomFich); finally JPEG.Free; end; end; finally bmp.Free; end; end end; finally MF.Free; end;
1- Existe-t'il une façon plus efficace pour réaliser cette conversion, n'utilisant pas éventuellement le bitmap qui génère le dépassement mémoire?
2- peut-on éviter d'utiliser la mémoire pour réaliser celà? (en passant par le disque par exemple)
3- est-ce que la notion de stream peut-être une piste?
4- existe-t'il une solution permettent de réserver l'espace nécessaire pour stocker le bitmap? (pouvant éventuellement dépasser la capacité mémoire)
ou toute autre idée, piste ou solution qui seront les bienvenues...
Merci![]()
Partager