Floodfill
- kelgyo
-
- Új fórumozó
-
- Hozzászólások: 11
- Köszönetek: 0
kelgyo válaszolt a témára: Floodfill
Köszi szépen, ennyi infó teljesen elég, a többi a fejlesztők dolga. 
TVC-hez szinte a teljes irodalom itt van a gépemen, készülök feléleszteni a dolgokat egy jó emulátorral.
Üdvözlettel:
Gyula

TVC-hez szinte a teljes irodalom itt van a gépemen, készülök feléleszteni a dolgokat egy jó emulátorral.

Üdvözlettel:
Gyula
- Gábor
-
- Adminisztrátor
-
- Hozzászólások: 401
- Karma: 7
- Köszönetek: 58
Gábor válaszolt a témára: Floodfill
Utána jártam és úgy tűnik a TCanvas.FloodFill nincs kidolgozva a TCanvas Linux-os megvalósításában (üres az eljárás).
Helyette megpróbálhatod a GraphUtil unit-ban található FloodFill eljárást használni, bár ez nálam "range check error" hibát okoz.
Továbbá egy külső komponens ( BGRABitmap ) is szóba jöhet, melyben elvileg van lehetőség az összetett alakzatok kitöltésére . (Ezt most még nem próbáltam, időhiány miatt.)
+ Videoton-TVC-hez van egy könyvem
Helyette megpróbálhatod a GraphUtil unit-ban található FloodFill eljárást használni, bár ez nálam "range check error" hibát okoz.
Továbbá egy külső komponens ( BGRABitmap ) is szóba jöhet, melyben elvileg van lehetőség az összetett alakzatok kitöltésére . (Ezt most még nem próbáltam, időhiány miatt.)
+ Videoton-TVC-hez van egy könyvem

- kelgyo
-
- Új fórumozó
-
- Hozzászólások: 11
- Köszönetek: 0
kelgyo válaszolt a témára: Floodfill
Ja, és eléggé őslénynek is számítok, mert Videoton-TVC géppel kezdtem és BASIC-kel, VT-DOS-ban Turbo Pascal 3.0-lal, Aztec C-vel, FIG Forth nyelvvel, csak ezek után jött az első PC. (Van itt valaki aki emlékszik még a TVC-re?)
- kelgyo
-
- Új fórumozó
-
- Hozzászólások: 11
- Köszönetek: 0
kelgyo válaszolt a témára: Floodfill
Annyit azért hozzátennék az egészhez, hogy nem vagyok profi programozó, infótanár vagyok, szeretem a számítógépes grafikát, és mellesleg hobbiból programozgatok. Ezt korábban TP70-ben tettem, később Delphiben, majd áttértem Windowsról Linuxra és jött a FPC meg a Lazarus. Feltételezem, hogy az operációs rendszerek függvényeiben rejlenek az itt felvetett kérdések is. A floodfill probléma csak azért érdekes, mert átírásnál okoz fejtörést ha a konvertált progi nem működik, meg hát mert nem hagynak nyugodni a nyitott kérdések. Új program írásakor nem gond, használok helyette mást.
- kelgyo
-
- Új fórumozó
-
- Hozzászólások: 11
- Köszönetek: 0
kelgyo válaszolt a témára: Floodfill
Egyszerű koordináta konverziók. Egy 1000x800-as mezőt transzformál a mindenkori canvas méretre.
function x(i:integer):integer;
begin
x:=(i*clientwidth) div 1000;
end;
function y(i:integer):integer;
begin
y:=((i*clientheight) div 800);
end;
function x(i:integer):integer;
begin
x:=(i*clientwidth) div 1000;
end;
function y(i:integer):integer;
begin
y:=((i*clientheight) div 800);
end;
- kelgyo
-
- Új fórumozó
-
- Hozzászólások: 11
- Köszönetek: 0
kelgyo válaszolt a témára: Floodfill
Bocs, nem láttam ezt a kommentet.
A többi kommentemben már válaszoltam.

- kelgyo
-
- Új fórumozó
-
- Hozzászólások: 11
- Köszönetek: 0
kelgyo válaszolt a témára: Floodfill
Sejtettem, hogy az elhagyás nem okoz gondot.

- kelgyo
-
- Új fórumozó
-
- Hozzászólások: 11
- Köszönetek: 0
kelgyo válaszolt a témára: Floodfill
Azokat nyugodtan elhagyhatod, elég az argumentumaikat beírni konstansként. Az y() és y() függvények csak relatív koordinátákat állít elő a form méretéből, és ha a formot átméretezzük, a rajz követi a form arányait.
- Gábor
-
- Adminisztrátor
-
- Hozzászólások: 401
- Karma: 7
- Köszönetek: 58
Gábor válaszolt a témára: Floodfill
Ha kihagyom őket akkor le tudom fordítani és produkálja amit írtál... töprengek rajta...

- Gábor
-
- Adminisztrátor
-
- Hozzászólások: 401
- Karma: 7
- Köszönetek: 58
Gábor válaszolt a témára: Floodfill
Hol vannak ezek az x() és y() függvények? Sajátod?
Ezek nélkül nem tudom tesztelni... Habár inkább úgy érzem, hogy valószínűleg semmit nem csinálnak és nincs rájuk szükség...
Ezek nélkül nem tudom tesztelni... Habár inkább úgy érzem, hogy valószínűleg semmit nem csinálnak és nincs rájuk szükség...
- kelgyo
-
- Új fórumozó
-
- Hozzászólások: 11
- Köszönetek: 0
kelgyo válaszolt a témára: Floodfill
Egy nagyon lényeges momentumról megfeledkeztem, pedig talán ez a legfontosabb, mert nem véletlen, hogy a Delphi helyett a Lazarust használom: Windows helyett Linuxot használok.
Lehet hogy "csak" az API hívás a ludas.

- kelgyo
-
- Új fórumozó
-
- Hozzászólások: 11
- Köszönetek: 0
kelgyo válaszolt a témára: Floodfill
...
pl. egy házikót kirajzoló kód ...
Delphiben működik, Lazarusban hibajelzés ugyan nincs, de nem színezi ki a tetőt:
with canvas do begin
//alap
brush.color:=clblue;
rectangle(0,0,clientwidth,y(650));
brush.color:=clgreen;
rectangle(0,y(650),clientwidth,clientheight);
//fal
brush.color:=clwhite;
rectangle(x(150),y(450),x(350),y(650));
rectangle(x(350),y(450),x(700),y(650));
//ajtó,ablak
rectangle(x(200),y(500),x(300),y(600));
rectangle(x(550),y(500),x(650),y(600));
rectangle(x(400),y(500),x(500),y(650));
//homlokzat,tető
moveto(x(700),y(450));
lineto(x(600),y(300));
lineto(x(250),y(300));
lineto(x(150),y(450));
moveto(x(250),y(300));
lineto(x(350),y(450));
brush.color:=clgray;
floodfill(x(250),y(440),clblack,fsborder);
brush.color:=clred;
floodfill(x(500),y(440),clblack,fsborder);
brush.color:=clblack;
ellipse(x(230),y(370),x(270),y(410));
//kémény
brush.color:=clred;
rectangle(x(400),y(200),x(450),y(300));
end;
Lazarusban csak így működik:
with canvas do begin
//alap
brush.color:=clblue;
rectangle(0,0,clientwidth,y(650));
brush.color:=clgreen;
rectangle(0,y(650),clientwidth,clientheight);
//fal
brush.color:=clwhite;
rectangle(x(150),y(450),x(350),y(650));
rectangle(x(350),y(450),x(700),y(650));
//ajtó,ablak
rectangle(x(200),y(500),x(300),y(600));
rectangle(x(550),y(500),x(650),y(600));
rectangle(x(400),y(500),x(500),y(650));
//tetõ
Brush.Color := clMaroon;
Polygon([Point(x(700),y(450)), Point(x(600),y(300)), Point(x(250),y(300)), Point(x(350),y(450))]);
//homlokzat
Brush.Color := clgray;
Polygon([Point(x(250),y(300)), Point(x(350),y(450)), Point(x(150),y(450))]);
brush.color:=clblack;
ellipse(x(230),y(370),x(270),y(410));
//kémény
brush.color:=clred;
rectangle(x(400),y(200),x(450),y(300));
end;
Itt a polygonra való átírás nem nyűg, de ha a sokszög csúcsai pl. metszéspontok, vagy paraméterezettek, illetve számítottak, akkor már nagyon is nyűg.
Mondjuk ez alapvetően akkor érdekes, ha más forrásból akarok Lazarusba átemelni és kipróbálni egy programot. Új proginál nyilván magam oldom meg.
pl. egy házikót kirajzoló kód ...
Delphiben működik, Lazarusban hibajelzés ugyan nincs, de nem színezi ki a tetőt:
with canvas do begin
//alap
brush.color:=clblue;
rectangle(0,0,clientwidth,y(650));
brush.color:=clgreen;
rectangle(0,y(650),clientwidth,clientheight);
//fal
brush.color:=clwhite;
rectangle(x(150),y(450),x(350),y(650));
rectangle(x(350),y(450),x(700),y(650));
//ajtó,ablak
rectangle(x(200),y(500),x(300),y(600));
rectangle(x(550),y(500),x(650),y(600));
rectangle(x(400),y(500),x(500),y(650));
//homlokzat,tető
moveto(x(700),y(450));
lineto(x(600),y(300));
lineto(x(250),y(300));
lineto(x(150),y(450));
moveto(x(250),y(300));
lineto(x(350),y(450));
brush.color:=clgray;
floodfill(x(250),y(440),clblack,fsborder);
brush.color:=clred;
floodfill(x(500),y(440),clblack,fsborder);
brush.color:=clblack;
ellipse(x(230),y(370),x(270),y(410));
//kémény
brush.color:=clred;
rectangle(x(400),y(200),x(450),y(300));
end;
Lazarusban csak így működik:
with canvas do begin
//alap
brush.color:=clblue;
rectangle(0,0,clientwidth,y(650));
brush.color:=clgreen;
rectangle(0,y(650),clientwidth,clientheight);
//fal
brush.color:=clwhite;
rectangle(x(150),y(450),x(350),y(650));
rectangle(x(350),y(450),x(700),y(650));
//ajtó,ablak
rectangle(x(200),y(500),x(300),y(600));
rectangle(x(550),y(500),x(650),y(600));
rectangle(x(400),y(500),x(500),y(650));
//tetõ
Brush.Color := clMaroon;
Polygon([Point(x(700),y(450)), Point(x(600),y(300)), Point(x(250),y(300)), Point(x(350),y(450))]);
//homlokzat
Brush.Color := clgray;
Polygon([Point(x(250),y(300)), Point(x(350),y(450)), Point(x(150),y(450))]);
brush.color:=clblack;
ellipse(x(230),y(370),x(270),y(410));
//kémény
brush.color:=clred;
rectangle(x(400),y(200),x(450),y(300));
end;
Itt a polygonra való átírás nem nyűg, de ha a sokszög csúcsai pl. metszéspontok, vagy paraméterezettek, illetve számítottak, akkor már nagyon is nyűg.
Mondjuk ez alapvetően akkor érdekes, ha más forrásból akarok Lazarusba átemelni és kipróbálni egy programot. Új proginál nyilván magam oldom meg.
- kelgyo
-
- Új fórumozó
-
- Hozzászólások: 11
- Köszönetek: 0
kelgyo válaszolt a témára: Floodfill
Szia 
Jó a kérdés. Eleddig - lévén, hogy Delphiben és Lazarusban próbálkoztam - csak a canvas funkcióival találkoztam, és ezt is azon belül tapasztaltam.
( Itt az ideje, hogy körülnézzek más helyeken is.
)

Jó a kérdés. Eleddig - lévén, hogy Delphiben és Lazarusban próbálkoztam - csak a canvas funkcióival találkoztam, és ezt is azon belül tapasztaltam.
( Itt az ideje, hogy körülnézzek más helyeken is.

- Gábor
-
- Adminisztrátor
-
- Hozzászólások: 401
- Karma: 7
- Köszönetek: 58
Gábor válaszolt a témára: Floodfill
Szia!
Több floodfill() eljárás is elérhető különböző helyeken (unit, class stb.), pl. Graph, LclIntf, TCanvas és egyebek...
Pontosan melyikre gondolsz?
+ Mellékelj egy rövid forráskódot ami bemutatja a problémát!
Több floodfill() eljárás is elérhető különböző helyeken (unit, class stb.), pl. Graph, LclIntf, TCanvas és egyebek...
Pontosan melyikre gondolsz?
+ Mellékelj egy rövid forráskódot ami bemutatja a problémát!
- kelgyo
-
- Új fórumozó
-
- Hozzászólások: 11
- Köszönetek: 0
kelgyo létrehozta a témát: Floodfill
Sziasztok
Több régi grafikus programomat írtam át Delphiből Lazarusba, de a neten talált delphis forrásprogramokat is előszeretettel fogalmazom át Lazarusba.
Több programban szerepel a floodfill grafikus funkció, ami a Delphi verzióban hibátlanul működik, Lazarusban se jelez a rendszer hibát, de nem látható semmi eredménye, így feltételezem, hogy a paraméterezésében lehet a hiba, esetleg a floodfill (még) nincs implementálva a Lazarusban. Polygon funkcióra átírva működik, de ha változók vannak a csúcspontokban, akkor elég nyűgös átírni. Keresgéltem a neten a témában, de erről semmit nem találtam.
Nektek mi a tapasztalatotok, illetve mi lehet a megoldás, ha ragaszkodni szeretnék az eredeti funkcióhoz?
Előre is köszönöm.
Több régi grafikus programomat írtam át Delphiből Lazarusba, de a neten talált delphis forrásprogramokat is előszeretettel fogalmazom át Lazarusba.
Több programban szerepel a floodfill grafikus funkció, ami a Delphi verzióban hibátlanul működik, Lazarusban se jelez a rendszer hibát, de nem látható semmi eredménye, így feltételezem, hogy a paraméterezésében lehet a hiba, esetleg a floodfill (még) nincs implementálva a Lazarusban. Polygon funkcióra átírva működik, de ha változók vannak a csúcspontokban, akkor elég nyűgös átírni. Keresgéltem a neten a témában, de erről semmit nem találtam.
Nektek mi a tapasztalatotok, illetve mi lehet a megoldás, ha ragaszkodni szeretnék az eredeti funkcióhoz?
Előre is köszönöm.