Redimensionner (pour l'amour de l'Art...)

seanblue Messages postés 1 Date d'inscription jeudi 27 mars 2003 Statut Membre Dernière intervention 10 décembre 2004 - 10 déc. 2004 à 15:44
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 - 11 déc. 2004 à 18:41
Bonjour à tous,

Débutant en Delphi (mais rompu à un autre language...) je m'interesse essentiellement à la programmation dans un contexte "artistique", voici ma question :

Comment redimensionner TRES RAPIDEMENT une image (bmp ou JPG peu m'importe...) de telle sorte qu'on se trouve face à une animation (non-sacadée)

exemple: une image (petite) arrive du fond de l'écran puis grandit jusqu'à l'occuper totalement créant ainsi une sorte de perspective...

Oups !! Espère avoir été clair ;)
Bien à vous

SeanBlue

2 réponses

cs_ManChesTer Messages postés 374 Date d'inscription vendredi 20 octobre 2000 Statut Modérateur Dernière intervention 15 janvier 2021
10 déc. 2004 à 22:52
Utilise Directx ou Opengl.

Bon Coding ....

ManChesTer.
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
11 déc. 2004 à 18:41
Salut (et bienvenue), seanblue

Pour redimentionner une image, il faut utiliser le methode StrechDraw du TCanvas.

Petit exemple :
Un Paintbox nommé PB.
Un Bouton (Button1)Un Timer (Timer1) : Interval 5, Enabled False
Jpeg dans les Uses.

Et ceci : pour les evenements OnClick du bouton :
procedure TForm1.Button1Click(Sender: TObject);
begin
  Img:=TJpegImage.Create;
  Img.LoadFromFile('E:\\Test.jpg');
  CRect:=PB.Canvas.ClipRect;
  Pos:=-200;
  Timer1.Enabled:=True;
end;


OnTimer du Timer1 :
procedure TForm1.Timer1Timer(Sender: TObject);
var
  CR : TRect;
begin
  CR:=PB.Canvas.ClipRect;
  if Pos < 0 then
    Inc(Pos)
  else
    Timer1.Enabled:=False;
  CRect:=Rect(CR.Left-Pos,CR.Top-Pos,CR.Right+Pos,CR.Bottom+Pos);
  PB.Canvas.StretchDraw(CRect,Img);
end;


Et dans le OnDestroy de la form :
procedure TForm1.Timer1Timer(Sender: TObject);
var
  CR : TRect;
begin
  CR:=PB.Canvas.ClipRect;
  if Pos < 0 then
    Inc(Pos)
  else
    Timer1.Enabled:=False;
  CRect:=Rect(CR.Left-Pos,CR.Top-Pos,CR.Right+Pos,CR.Bottom+Pos);
  PB.Canvas.StretchDraw(CRect,Img);
end;


Sans oublier de declarer quelques variables globales :
var
  Form1: TForm1;
  Img : TJpegImage;
  CRect : TRect;
  Pos : Integer;

Et voila !!!

Il suffit de changer la valeur de depart de "Pos" pour fare varier la taille de départ de l'image. La propriete Interval du Timer sert à varier la frequence d'agrandissement.

Bien sûr, changer le nom de fichier par une image Jpeg valide ou adapter avec un TBitmap ou TPicture pour les autres types de fichiers.

Le résultat est legerement désagreable à l'oeil nu, mais en appliquant une methode de filtrage de Delphiprog que je ne retrouve plus, cela doit rendre mieux.

@ ++ Florent

Si tu ne te plantes pas ......
tu ne poussera jamais
0
Rejoignez-nous