Lazarus 1.8.4 (2018.05.22.)
Letöltés

file Floodfill

  • kelgyo
  • kelgyo profilkép
  • Új fórumozó
  • Ú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
#2273
  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 408
  • Karma: 8
  • 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 :)
#2272
  • kelgyo
  • kelgyo profilkép
  • Új fórumozó
  • Ú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?)
#2271
  • kelgyo
  • kelgyo profilkép
  • Új fórumozó
  • Ú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.
#2270
  • kelgyo
  • kelgyo profilkép
  • Új fórumozó
  • Ú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;
#2269
  • kelgyo
  • kelgyo profilkép
  • Új fórumozó
  • Ú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.
#2268
  • kelgyo
  • kelgyo profilkép
  • Új fórumozó
  • Ú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. :)
#2267
  • kelgyo
  • kelgyo profilkép
  • Új fórumozó
  • Ú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.
#2266
  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 408
  • Karma: 8
  • 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... :)
#2265
  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 408
  • Karma: 8
  • 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...
#2264
  • kelgyo
  • kelgyo profilkép
  • Új fórumozó
  • Ú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.
#2263
  • kelgyo
  • kelgyo profilkép
  • Új fórumozó
  • Ú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.
#2262
  • kelgyo
  • kelgyo profilkép
  • Új fórumozó
  • Ú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. :) )
#2261
  • Gábor
  • Gábor profilkép
  • Adminisztrátor
  • Adminisztrátor
  • Hozzászólások: 408
  • Karma: 8
  • 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!
#2260
  • kelgyo
  • kelgyo profilkép
  • Új fórumozó
  • Ú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.
#2259