12. december 2002 - 20:56Der er
10 kommentarer og 1 løsning
"Malebøtte" funktion i Canvas image....
Hej Allesammen, Jeg er i øjeblikket ved at lave maleprogram hvori jeg bruger Canvas til at lave billeder med (streger) og så har jeg længe ville have en "malebøtte" funktion, den skal virke på følgende måde...: *Jeg laver via musen en rund (næsten) cirkel (canvas.pen = clBlack) *Så trykker jeg indenfor cirkelen så bliver det hvide (eller hvad farve det nu er til den) til clRed (el lign)
Er det ikke muligt at den selv finder ud af at den kun ændrer farven til den når til en anden farve???
Ved ikke helt om I forstår spørgsmålet men hvis I tror I har løsningen så bare spørg nærmere, for det er rimelig vigtigt at jeg får løst det her problem..!!!!
dl> Jo tak for det.. :) Skal lige prøve eksemplet men det kan jeg først i overmorgen så det tager lige lidt tid...
Kayb> Hvis jeg vil have det sådan at man skal trykke på en button for at den går over til "malebøtte funktion"? Min male "funktion" ser sådan her ud: Image1.Canvas.LineTo(Mouse.CursorPos.X-image1.left-form1.left-3,Mouse.CursorPos.Y-image1.top-form1.top-42)
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button=mbLeft then begin if Fyld=True then begin Canvas.Brush.Style:=bsSolid; Canvas.Brush.Color:=ColorBox1.Selected; Canvas.FloodFill(X,Y,clBlack,fsBorder); Exit; end; Drawing:=True; X:=Mouse.CursorPos.X; Y:=Mouse.CursorPos.Y; end else Drawing:=False;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if Drawing=True then begin Canvas.LineTo(X,Y); End; end;
procedure TForm1.ColorBox1Change(Sender: TObject); begin Canvas.Pen.Color:=ColorBox1.Selected; end;
procedure TForm1.BitBtn1Click(Sender: TObject); begin if Fyld=True then Fyld:=False else Fyld:=True; end;
end.
Her er et hurtigt eksempel.Håber ikke det er vildt uoverskueligt.
Det er fint.. :) Men det eneste jeg har brug for er: Image1.Canvas.Brush.Style:=bsSolid; Image1.Canvas.Brush.Color:=Clred; Image1.Canvas.FloodFill(X,Y,clBlack,fsBorder); Men hvis jeg vil have den til kun at udfylde indenfor virkelen også selvom rammen ikke består af ClBlack (også alle andre farver) /ProDoc
Jo men har du ik en løsning på mit sidste spørgsmål...? For i canvas når man bruger FloodFill så udfylder den kun indtil/hvis den farve som er angivet.... er det ikke muligt at sige at den skal farve til bare en ny farve.... altså fx clBlack som er skrevet herover?
Den kode jeg har nu fylder kun ud til den sidst lavede (farvede) streg jeg vil have den til at gøre sådan at den kun farver ud til enhver streg (anden farve) og ikke kun den sidst lavet streg...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.