Envoyé par
AlainFt
Ce que je ne comprends pas dans votre code ce sont les coordonnées 200,200. Que représentent-elles ? Comment sont elles obtenues ou calculées ?
Cela semble être les coordonnées du centre du composant GCmap dont les dimensions sont 400x400. Est-ce bien cela ?
Oui, ce sont bien les coordonnées du centre du composant GCMap, et ce sont aussi (et surtout) les coordonnées du centre de l'avion. Par facilité, j'avais positionné le composant GCRafale de telle sorte que le centre de l'avion coïncide avec le centre du composant GCMap.
Donc à vous de remplacer ces coordonnées en fonction de l'endroit où vous décidez de placer l'avion.
Au sujet de ce code :
Bitmap.PutImageAngle(-Xpos, -Ypos, bmpMap.FilterRotate(Origine,tbMap.Position,false), 0, rfHalfCosine, 0, 0);
Effectivement, il est inutilement compliqué, puisque vous avez deux rotations, dont une avec un angle 0. Autant utiliser un simple PutImage, dans ce cas-là, au lieu de PutImageAngle.
Mais en outre ce code entraîne une fuite de mémoire, puisqu'à chaque appel la fonction FilterRotate crée un nouveau bitmap qui ne sera jamais libéré.
Autre point à prendre en compte : ça ne sert à rien de faire tourner toute la carte à chaque fois (comme le fait, sauf erreur de ma part, le code ci-dessus). Il vaut mieux copier le carré dont on a besoin, et ne faire tourner que ce carré. La différence de performance sera sensible, surtout si la carte est grande.
Voici un exemple (toujours avec les mêmes coordonnées magiques "200, 200").
1 2 3 4 5 6 7 8 9 10 11 12 13
| procedure TForm1.GCMapRedraw(Sender: TObject; Bitmap: TBGRABitmap);
const
CRacine = 1.415;
var
partie: TBGRABitmap;
w: integer;
begin
w := Ceil(CRacine * Max(Bitmap.Width, Bitmap.Height));
w := w div 2;
partie := bmp.GetPart(Rect(Xpos - w, Ypos - w, Xpos + w, YPos + w)) as TBGRABitmap;
Bitmap.PutImageAngle(200, 200, partie, TbRafale.Position, rfHalfCosine, w, w);
partie.Free;
end; |
Je me sers de la variable w pour déterminer la dimension du carré que je vais copier. L'idée étant que le carré soit assez grand pour toujours bien remplir le composant GCMap.
Partager