Rysowanie za pomoca pixeli w Delphi

0

Witam,
Jak w temacie, czyli jak narysowac linie pixel po pixelu.-------------------------------------------------
Pozdrawiam i życzę miłego dnia.

0

var
x,y : integer;
begin
y := 5;
for x :=0 to image1.width do
begin
image1.Canvas.Pixels[x,y] := clblue;
end;

rysuje linie poziomą :)

0

do tego nie jest nawet potrzebny TImage :-)
var
x,y : integer;
begin
y := 5;
forx :=0 to Width do
begin
Canvas.Pixels[x,y] := clblue;
end;
end;

rysuje pozioma linie na formie
mozesz to stosowac do wszystkiego co posiada Canvas :-)
---=[ Delphi 3, 6 ]=-
-=-==[ LKS ]==-=-

0

tak dla wyjasnienia :-)
niech nikt sie nie czepia ze napisalem "nie jest"
sorki ale spacji zapomnialem :-)
powinno byc "nie jest"---=[ Delphi 3, 6 ]=-
-=-==[ LKS ]==-=-

0

Szpiegujesz mnie LKS :P

hehe - ja dalem przyklad pod TImage a nie pod TForm....

0

ta procedura rysuje linie pixel po pixel w paskalu, to juz latwo przerobic na delphi

procedure line (x1,y1,x2,y2:integer);
var
a : real;
i : integer;
kolor : word;

begin
kolor := 10;

if x1 &gt x2 then
begin
i := x1;
x1 := x2;
x2 := i;
end;

if y1 &gt y2 then
begin
i := y1;
y1 := y2;
y2 := i;
end;

if y1 &lt&gt y2 then
begin
a := (x2-x1)/(y2-y1);
if a &gt= 1 then
for i:=x1 to x2 do
putpixel(i,round((i-x1)/a+y1),kolor);
if a &lt 1 then
for i:=y1 to y2 do
putpixel(round((i-y1)*a+x1),i,kolor);

end else for i:=x1 to x2 do putpixel (i,y1,kolor);

end;--Delphi 6 (paskal is good too)

0

zylo hmm... ej my tu nie w pascalu piszemy tylko w Delphi :D hehe :)

0

Dobra, zyla sie nie czepiajcie, jako jedyny rysuje dowolną linię, a nie prostą poziomą lub pionową. Gratulacje pomysłu zaokrąglania przez dwa przypadki :-) --Delphi 4

Skysh The God, Your Slave

0

dzieki skysh, poza tym nie ma chyba roznicy czy ktos pisze w delphi czy w paskalu, czy w tym i tym, ale jesli problemem jest przerobienie tego kodu do delphi to pokaze jak nie wiele do tego potrzeba

var
a : real;
i : integer;
kolor : integer;

begin
kolor := 10;

if x1 &gt x2 then
begin
i := x1;
x1 := x2;
x2 := i;
end;

if y1 &gt y2 then
begin
i := y1;
y1 := y2;
y2 := i;
end;

if y1 &lt&gt y2 then
begin
a := (x2-x1)/(y2-y1);
if a &gt= 1 then
for i:=x1 to x2 do
Canvas.Pixels[i,round((i-x1)/a+y2)] := clblue;
{ putpixel(i,round((i-x1)/a+y1),kolor); }
if a &lt 1 then
for i:=y1 to y2 do
Canvas.Pixels[round((i-y1)*a+x1),i] := clblue;
{ putpixel(round((i-y1)*a+x1),i,kolor); }
end else for i:=x1 to x2 do Canvas.Pixels[i,y1] := clblue;
{ end else for i:=x1 to x2 do putpixel (i,y1,kolor); }
--Delphi 6 (paskal is good too)

0

wiem ze chodzilo o rysowanie punkt po punkcie ale jakby komus sie to przydalo to jest jeszcze cos takiego:

Canvas.MoveTo(10,10); *przesun kursor w pozycje 10,10
Canvas.LineTo(100,200); * narysuj linie do 100,200---=[ Delphi 3, 6 ]=-
-=-==[ LKS ]==-=-

0

w poscie gdzie pisalem jak ten kod wygladalby w delphi zrobilem malutki bledziek w jednym miejscu (powinno byc y1 zamiast y2)
poza tym wymyslilem inny sposob na rysowanie tej linii: przez rekurencje, jest wolniejszy, ale kod jest znacznie krotszy

procedure line (x1,y1,x2,y2:real);
begin
if (abs(x2-x1) &gt 1) or (abs(y2-y1) &gt 1) then
begin
{paskal} putpixel (round((x1+x2)/2),round((y1+y2)/2),10);
{delphi} {Canvas.Pixels[round((x1+x2)/2),round((y1+y2)/2)] := clblue; }
line (x1,y1,(x1+x2)/2,(y1+y2)/2);
line (x2,y2,(x1+x2)/2,(y1+y2)/2);
end;
end;--Delphi 6 (paskal is good too)

1 użytkowników online, w tym zalogowanych: 0, gości: 1