Bonjour,
Dans mon vieux Win2000 sp4 je pars du programme d'exemple de l'aide de mon D7 perso, où je peux lire :
Vus les traits horizontaux qui sortent au click sur le bouton, on se demande quelle est l'utilité de cet exemple : a-t-on vraiment besoin d'ouvrir un fichier ?
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 procedure TForm1.Button1Click(Sender: TObject); // Cet exemple montre le dessin direct dans le BitMap var x,y : Integer; BitMap : TBitMap; P : PByteArray; begin BitMap := TBitMap.create; try // Sous Windows remplacer MyBitmap.png par un nom de chemin complet tel que // C:\Program Files\Common Files\Borland Shared\Images\Splash\256color\factory.bmp // j'adapte comme on me le dit ci-dessus, et ça donne : //BitMap.LoadFromFile('MyBitmap.png'); BitMap.LoadFromFile('D:\Program Files\Fichiers communs\Borland Shared\Images\Splash\256Color\factory.bmp'); for y := 0 to BitMap.Height -1 do begin P := BitMap.ScanLine[y]; for x := 0 to BitMap.Width -1 do P[x] := y; // ligne de l'aide --> traits horizontaux // P[x] := P[y]; // traits horizontaux où on retrouve les couleurs de l'image // P[y] := P[x]; // image ok mais barrée d'un trait oblique à 45° allant d'en haut-à gauche à en bas-environ 180 end; Canvas.Draw(0,0,BitMap); finally BitMap.Free; end;
Vous avez le même résultat chez vous ?
Fort de cette expérience, j'ai voulu pousser le bouchon un peu plus loin, et dans un autre bouton je code, dérivé du précédent,
et j'obtiens des couleurs complètement en vrac, regardez :
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 procedure TForm1.Button2Click(Sender: TObject); var x,y : Integer; BitMap1,Bitmap2 : TBitMap; P1,P2 : PByteArray; begin BitMap1 := TBitMap.create; BitMap2 := TBitMap.create; try BitMap1.LoadFromFile('D:\Program Files\Fichiers communs\Borland Shared\Images\Splash\256Color\factory.bmp'); BitMap2.PixelFormat := BitMap1.PixelFormat; BitMap2.Width := BitMap1.Width; BitMap2.Height:= BitMap1.Height; for y := 0 to BitMap1.Height -1 do begin P1 := BitMap1.ScanLine[y]; P2 := BitMap2.ScanLine[y]; for x := 0 to BitMap1.Width -1 do P2[x] := P1[x]; // couleurs à la ramasse mais forme bonne end; Canvas.Draw(0,0,BitMap2); finally BitMap1.Free; BitMap2.Free; end;
Pourquoi ?
Est-ce à dire que la recopie for x := 0 to BitMap1.Width -1 do P2[x] := P1[x]; fait n'importe quoi ?
Que faire pour avoir les bonnes couleurs ?
Merci de vos retours,
Partager