Bonjour à toutes et à tous,

Je suis en train de réaliser une application GPS dont l'affichage est géré à l'aide de la bibliothèque TBGRABitmap. J'obtiens un affichage relativement fluide, sur le déplacement, la rotation et le ré-échantillonnage de mon image, sauf qu'à chaque rafraichissement de mon image (toutes les secondes), je perds de l'ordre de 1 ko de mémoire, ce qui fait qu'au bout de quelques centaines de secondes, l'application plante !

Dans la procédure suivante que j'emploie pour afficher mon image, j'ai réussi à trouver le coupable : c'est la fonction "Resample". Est-ce moi qui ne l'utilise pas correctement ou bien est-ce lié à cette fonction ?

Merci pour vos informations.


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
procedure TAffCarte.PaintBoxPaint(Sender: TObject);
// *** la PaintBox est repainte ***
var
  LBmp: TBGRABitmap;
begin
  LBmp := TBGRABitmap.Create(PaintBox.Width, PaintBox.Height, BGRAWhite);
  try
    LBmp.PutImageAngle(Dec0.X-Depl.X, Dec0.Y-Depl.Y, bmpCarte, tckbAngle.Position,
    AffXdiv2-(Dec0.X-Depl.X), AffYdiv2-(Dec0.Y-Depl.Y),
    $FF, DecalApresRot, False); // Déplacement et rotation
    kZoom:= tckbResample.Position / 100;
    HG.X:= Round((1-kZoom)*(AffXdiv2));
    HG.Y:= Round((1-kZoom)*(AffYdiv2));
    LBmp := LBmp.Resample(Round(Lbmp.Width * kZoom), Round(LBmp.Height* kZoom), rmSimpleStretch) as TBGRABitmap; // Zoom
    LBmp.Draw(PaintBox.Canvas, HG.X, HG.Y, False); // Trace la carte avec ses déplacements, zoom et rotation
    LBmp.Free;
  except
    LBmp.Free;
  end;
  Mem:= GetHeapStatus; // A chaque tour, je perd environ 1 ko de mémoire
  Edit5.Text:= IntToStr(Mem.TotalFree);
end;
Cordialement.

Pierre