Bonjour à toutes et à tous,

Dans un programme, je charge un millier d'images Jpg. Sur ce millier, j'en réenregistre 900 telles quelles. Les cent autres sont modifiées en taille avant d'être réenregistrées.

Pour ces 900, j'écris ce qui suit :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
for i:= 0 to 899 do
begin
  Pict:= Tpicture.Create;
  Pict.LoadFromFile(FchE[i]);
  ... // D'autres tâches liées à ces fichiers
  Pict.Jpeg.Compression.Quality:= 50;
  Pict.SaveToFile(FchS[i]);
  Pict.Free;
end;
Ça fonctionne bien sauf que le taux de compression que j'impose n'est pas pris en compte.

Je modifie mon code en introduisant un autre objet Tpicture tel que :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
for i:= 0 to 899 do
begin
  Pict:= TPicture.Create;
  Pict.LoadFromFile(FchE[i]);
  ... // D'autres tâches liées à ces fichiers
  PictDst:= TPicture.Create;
  PictDst.Bitmap.Assign(Pict.Bitmap); // Recopie de Pict dans PictDst
  PictDst.Jpeg.Compression.Quality:= 50;
  PictDst.SaveToFile(FchS[i]);
  Pict.Free;
  PictDst.Free;
end;
Cette fois-ci, mon taux de compression est bien pris en compte, mais, à cause de la recopie, cela prend beaucoup plus de temps que la première solution.

Existe-t-il une astuce pour faire en sorte qu'avec un seul TPicture, le taux de compression soit pris en compte ?

Merci pour vos renseignements.

Cordialement.

Pierre