En faite ca va j'ai compris le mieux c'est qu'on a pas besoin de AA ensuite, c'est bien lisse
Merci
En faite ca va j'ai compris le mieux c'est qu'on a pas besoin de AA ensuite, c'est bien lisse
Merci
re,
J'ai un problème quand je mets Doublebuffered à true
J'obtient un bug graphique dans les panels qui doivent redimenssioner
Une idée ?
Merci
Quelle est cette fonction de redimensionnement ?
A quoi te sert-elle ? C'est pour agrandir l'espace d'affichage ou l'étirer ?
Regarde, je partirais sur cette base. Ensuite, je pense que j'ajouterais le masque de transparence alpha, et éventuellement l'anti-aliasing...
http://sub0.developpez.com/delphi/bezier.zip
Pour ta courbe, ne serait-il pas plus simple de faire une ligne droite entre les points ?
Si ces points sont suffisemment nombreux, ça ne se verra pas (l'anti-aliasing pourra adoucir éventuellement).
Voici une fonction pour réaliser un flou légé (en 24bits) si ça t'intéresse...
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 Procedure Gaussien(Var clip: TBitmap); Var x, y: Integer; p0, p1, p2: PByteArray; Begin For y := 1 To clip.Height - 2 Do Begin p0 := clip.ScanLine[y - 1]; p1 := clip.ScanLine[y]; p2 := clip.ScanLine[y + 1]; For x := 1 To clip.Width - 2 Do Begin p1[x * 3] := (p0[x * 3] + p2[x * 3] + p1[(x - 1) * 3] + p1[(x + 1) * 3]) Div 4; p1[x * 3 + 1] := (p0[x * 3 + 1] + p2[x * 3 + 1] + p1[(x - 1) * 3 + 1] + p1[(x + 1) * 3 + 1]) Div 4; p1[x * 3 + 2] := (p0[x * 3 + 2] + p2[x * 3 + 2] + p1[(x - 1) * 3 + 2] + p1[(x + 1) * 3 + 2]) Div 4; End; End; End;
De retour parmis vous après 10 ans!!
C'est juste un simple tsplitter ...
Je vais faire un composant mais ce qui m'embete beaucoup c'est ce clignotement ...
Oui c'est tr_s bien mais je n'ai pas de support pour l'image
Le Timage ne fonctionne pas comme je veux
Le tpaintbox n'a pas de Doublebuffered
Peut on dessiner sur un tpanel ?
C'est à dire ? Qu'est-ce-qui manque ?Le Timage ne fonctionne pas comme je veux
Oui, sur tous les objets possèdant un Canvas...Peut on dessiner sur un tpanel ?
De retour parmis vous après 10 ans!!
Oui bien enf aite des que je redimensionne le Timage grace au splitter et que je redessine, le canvas ne suit pas, pourtant en Align := alclient.
je me crée un petit composant qui pourra resservir à partir du tpanel
Voila comment j'ai commencé
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181 unit GRAPH; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TGraph = class(TCustomControl) private fBorderStyle: TBorderStyle; fAutoSize: boolean; fCenter: boolean; fResBitmap: string; HBitmap: HBitmap; BMPWidth: integer; BMPHeight: integer; procedure SetBorderStyle(Value: TBorderStyle); procedure SetAutoSize(Value: boolean); procedure SetCenter(Value: boolean); procedure paint; override; protected procedure CreateParams(var Params: TCreateParams); override; public published property BorderStyle: TBorderStyle read fBorderStyle write SetBorderStyle; property AutoSize: boolean read fAutoSize write SetAutoSize; property Center: boolean read fCenter write SetCenter; property Align; property Color; property Ctl3D; property DragCursor; property DragMode; property Enabled; property ParentColor; property ParentCtl3D; property ParentShowHint; property PopupMenu; property ShowHint; property Visible; property OnClick; property OnDblClick; property OnDragDrop; property OnDragOver; property OnEndDrag; property OnMouseDown; property OnMouseMove; property OnMouseUp; property OnStartDrag; end; procedure Register; implementation procedure Register; begin RegisterComponents('OnKeySoft', [TGraph]); end; procedure TGraph.CreateParams(var Params: TCreateParams); const BorderStyles: array[TBorderStyle] of Longint = (0, WS_BORDER); begin inherited CreateParams(Params); with Params do begin Style := Style or BorderStyles[FBorderStyle]; if NewStyleControls and Ctl3D and (FBorderStyle = bsSingle) then begin Style := Style and not WS_BORDER; ExStyle := ExStyle or WS_EX_CLIENTEDGE; end; end; end; procedure TGraph.SetBorderStyle(Value: TBorderStyle); begin if FBorderStyle <> Value then begin FBorderStyle := Value; RecreateWnd; end; end; procedure TGraph.SetAutoSize(Value: boolean); begin fAutoSize := Value; if Value and (HBitmap <> 0) then begin ClientWidth := BMPWidth; ClientHeight := BMPHeight; end; end; procedure TGraph.SetCenter(Value: boolean); begin if fCenter <> Value then begin fCenter := Value; if Value and (not fAutoSize) and (HBitmap <> 0) then Invalidate; end; end; procedure TGraph.Paint; var i, A, B, C: integer; P: array[1..4] of TPoint; const Larg = 5; begin with Canvas do begin // Creation d'un rectangle qui fait le tour Brush.Color := $00C2EECE; Pen.Color := $00C2EECE; Brush.Style := bsSolid; Rectangle(0, 0, Width, Height); Pen.Color := $00A8E3B3; // Construction de la courbe pen.Color := clblack; pen.Width := 1; { for i := listbox1.Items.count - 1 downto 1 do begin A := strtoint(listbox1.items.strings[i - 1]); C := strtoint(listbox1.items.strings[i]); B := (A + C) div 2; P[1] := Point(Width - ((i - 1) * Larg * 3 + Larg * 0), Height - A); P[2] := Point(Width - ((i - 1) * Larg * 3 + Larg * 1), Height - B); P[3] := Point(Width - ((i - 1) * Larg * 3 + Larg * 2), Height - C); P[4] := Point(Width - ((i - 1) * Larg * 3 + Larg * 3), Height - C); PolyBezier(P); end; } Pen.Color := $00A8E3B3; pen.Width := 1; // création des lignes verticales for i := 0 to (Width div 50) do begin moveto(Width - i * 50, 0); lineto(Width - i * 50, Height); end; // création des lignes horizontales for i := 0 to (Height div 25) do begin moveto(0, Height - i * 25); lineto(Width, Height - i * 25); end; pen.Color :=$0044B13F; pen.Width := 2; { for i := listbox1.Items.count-1 downto 1 do begin A := strtoint(listbox1.items.strings[i-1]); C := strtoint(listbox1.items.strings[i]); B := (A + C) div 2; P[1] := Point(Width - ((i - 1) * Larg * 3 + Larg * 0), Height - A); P[2] := Point(Width - ((i - 1) * Larg * 3 + Larg * 1), Height -B); P[3] := Point(Width - ((i - 1) * Larg * 3 + Larg * 2), Height -C); P[4] := Point(Width - ((i - 1) * Larg * 3 + Larg * 3), Height -C); PolyBezier(P); end; } end; end; end.
Lorsque tu redimensionnes une image, il faut penser à redimensionner également le bitmap...
Exemple :Voilà qui devrait résoudre ton problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Image2.Width := ClientWidth; Image2.Height := ClientHeight; Image2.Picture.Bitmap.Width := Image2.Width; Image2.Picture.Bitmap.Height := Image2.Height;
Sinon, j'ai plusieurs méthodes à te proposer si tu veux optimiser l'affichage de ma démo.
A propos, tu remarqueras que l'on peut choisir la largeur...
De retour parmis vous après 10 ans!!
http://sub0.developpez.com/delphi/bezier2c.zip
J'ai ajouté le filtre de flou légé... Qu'en penses-tu ?
Sinon sans le filtre :
Et le graphique ne se redessine que pour le redimensionnement...
Sujet résolu ?
De retour parmis vous après 10 ans!!
Oui c'est très bien, même si je suis pas très flou gaussien.
Sujet résolu
Mais pour mon composant
Comment rafraichir le graph en design time, quand on change une couleur ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 property backcolor: tcolor read fbackcolor write fbackcolor default clwhite; property linecolor: tcolor read flinecolor write flinecolor default clblack; property graphcolor: tcolor read fgraphcolor write fgraphcolor default clred; property remplicolor: tcolor read fremplicolor write fremplicolor default clgreen ;
Comment mettre des couleurs par défaut car la il mets tout en Clblack dans l'editeur de composant ?
Merci d'avance
Il faut définir les propriété dans Create()Comment mettre des couleurs par défaut car la il mets tout en Clblack dans l'editeur de composant ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 constructor MonComposant.Create(AOwner: TControl); begin LineColor := clBlack; BackColor := clWhite; etc... end;
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager