Hallo,
also ich weiß, die Frage ist mal wieder auf etwas tieferem Niveau, aber irgendwie komm ich nicht dahinter.
Die folgende Prozedur soll in einem Bestimmten Bereich auf einem TCanvas alle Pixel, die eine bestimmte Farbe haben, durch eine andere Farbe ersetzen.
Der Bereich wird durch MouseDown und MouseUp auf dem Image festgelegt.
Bei dieser Prozedur:
Delphi-Quellcode:
procedure Tmainform.colorchange;
var
Ix,Iy:Integer;
begin
for Ix:=moused.X to current.X do
for Iy:=moused.Y to current.Y do
if img.Canvas.Pixels[Ix,Iy]=pencolor
then img.Canvas.Pixels[Ix,Iy]:=brushcolor;
end;
geht das ganze nur, wenn der Erste punkt, also der MouseDown-Punkt auf dem Canvas der OBEN LINKS ist.
ich habe dann folgendes geschrieben:
Delphi-Quellcode:
procedure Tmainform.colorchange;
var
Ix,Iy:Integer;
x1,x2,y1,y2:Integer;
begin
if moused.X < current.X then x1:=moused.X else x1:=current.X;
if moused.Y < current.Y then y1:=moused.Y else y1:=current.Y;
if moused.X < current.X then x2:=current.X else x2:=moused.X;
if moused.Y < current.Y then y2:=current.Y else y2:=moused.Y;
for Ix:=x1 to x2 do
for Iy:=y1 to y2 do
if img.Canvas.Pixels[Ix,Iy]=pencolor
then img.Canvas.Pixels[Ix,Iy]:=brushcolor;
end;
Das geht "natürlich" wunderbar, aber ich frage mich, warum die andere Version nicht funktioniert.
Wäre schön, wenn das jemand beantworten könnte.