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:
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;
Mes questions:
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