Bonjour,
Je travaille sur un stretch "manuel". Mon code fonctionne mais j'aimerais obtenir le même résultat sans passer par les TImage dans les calculs intermédiaires.
Sur la vignette, on distingue à droite le résultat obtenu... et à gauche les objets initiaux.
Le but de l'opération ici est d'élargir Image1 en longueur sans en élargir les "bords" de 1 pixel. Si on utilise le stretch normal, les bords vont rapidement passer à 2, 3 pixels provoquant un effet peu esthétique. Ici je regarde simplement la faisabilité sur un stretch horizontal, l"opération étant reconduite pour la partie verticale. Je n'ai peut-être pas besoin de préciser que les fonctions associées aux TRect et autres TCanvas me sont plutôt étrangères... Si quelqu'un a une doc exhaustive la-dessus avec les "bonnes" bibliothèques qui s'y attachent (y compris compatibles Linux), je suis preneur.
Le code est celui-ci :
Le problème c'est que je voudrais me débarasser des TImage pour ne garder que des TCanvas et des TRect. Je garderais Image1 et Image2 comme point de départ et d'arrivée... Je me suis dit dans un premier temps que c'était simple en créant srcCanvas pour arriver à dstCanvas... Et là, je bugge : il y a toujours quelque chose qui n'est pas défini ou qui n'est pas du bon type.
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 procedure TForm1.BitBtn1Click(Sender: TObject); var {Image 1 -> lRect de 0 à Image1.Width div 2 rRect de Image1.Width div 2 à Image1.Width; mRect de Image1.Width div 2 à (Image1.Width div 2) +1} mRect, rRect, lRect : TRect; {Image 2 -> dRect : Rectangle de destination lPos, rPos : Positionnement des rect. copiés} dRect : TRect; lPos, rPos, i : Integer; begin with Image1.canvas do begin lRect:=Rect(0, 0,Image1.Width div 2,Image1.Height); CopyRect(lRect, Image1.Canvas, lRect); rRect := Rect(Image1.Width div 2,0,Image1.Width,Image1.Height); CopyRect(rRect, Image1.Canvas, rRect); mRect:=Rect(Image1.Width div 2,0,(Image1.Width div 2) +1,Image1.Height); CopyRect(mRect, Image1.Canvas, mRect); end; with Image2.canvas do begin {détermination des bornes des zones dans Image2} rPos := Image2.Width - (Image1.Width div 2); lPos := Image1.Width div 2; dRect := Rect(0,0,Image1.Width div 2,Image1.Height); CopyRect(dRect, Image1.Canvas,lRect); for i := lPos to rPos -1 do begin dRect := Rect(i, 0, i+1, Image1.Height); CopyRect(dRect, Image1.Canvas, mRect); end; dRect := Rect(rPos,0,Image2.Width,Image1.Height); CopyRect(dRect, Image1.Canvas, rRect); end; end;
Un petit coup de main SVP...
Merci. A+
Partager