.[ ČeskéHry.cz ].
Vyplnování ploch v java Graphics

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Java / J2ME
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
lovci



Založen: 04. 12. 2009
Příspěvky: 12

PříspěvekZaslal: 4. prosinec 2009, 19:01:25    Předmět: Vyplnování ploch v java Graphics Odpovědět s citátem

Ahoj, řeším problém s vyplňováním ploch(něco jako nástroj pixla).
Mám v mySQL uložený plán (změť čar a refrenčních bodů). Čáry jsou neorganizovaně uloženy (z leva do prava z prava doleva) a jednotlivé body určují místo které je potřeba nějak vyplnit(většinou 4 úhelníky z prusečíků těch čar).
Takže a problém je v tom, že první řešení bylo zjištění nejbližších přímek a jejich prusečíků z toho jsem dostal 4 body a ty jsem vykreslil jako FillRect. Jenže tato metoda je dost problémová a nějak se mi tu vodící přímku nepovedlo naprogramovat dost inteligentně aby našla vždy ty zprávné prusečíky a tak to u obzvláště křivých tvarů neplnilo požadovaný efekt, nebo byl-li to polygon s více vrcholy.
Moje druhé řešení je, že se pokusím implemetovat algoritmus flood fill

http://en.wikipedia.org/wiki/Flood_fill

, abych docílil efektu vyplnění jako ve starém dobrém grafickém rozhraní v Pascalu(to bylo stávající řešení, které modernizujeme do javy).

popis:
1.připravím si pole int[scaledWidth][scaledHeight] oblast reprezentujíci kreslenou plochu(čáry)- ten scale tam je proto, že ty čáry budou např. 10x zmenšené aby ten flood fill byl co nejrychlejší.
2. vytvořím si Image do kterého vykreslím zmenšené čáry(nevím jak kreslit do Image).
3. podle referenčních bodů si vytípnu oblast kolem(nějaký borderMaxX a y)
provedu grabPixels() do pole oblast, aplikuju flood fill a vytvořím si Shape vyplněné oblasti, které si přidám do nějakeho Vectoru nebo Array shape.
4. dle požadavků vykreslím všechny čáry a Shapes ve zprávném měřítku již v g.drawLine() a g.fillShape().

A problém mám s tím jak toho docílit.

1.Potřebuju to vykreslit do mého Image, něco jako Graphics g.drawLine(x1, y1, x2, y2), ale nevím jak bych mohl takhle kreslit do Image.
2. Potřebuju "vytípnout" danou oblast(dle ref bodu) z tohoto Image( to vím to použiju PixelGraber).
3. aplikuju algoritmus ff a daný shape nebo ByteArray vykreslím.

Takže žádám o radu jak to nejlépe a nejvýkoněji provést, jestli mám normálně kreslit do Graphics a pak to z ní nějak vytáhnu do Image(nebo nějaké array pixelů) na kterém provedu ten PixelGrab nebo jestli nějak jde kreslit do Image rovnou (nechci si psát vlastní funkce, které by "vykreslovay" Lines do mého ByteArray ve kterém bych mohl lehce provést ff).
Neřešil jste někdo něco takového? Za každou radu nebo užitečný link děkuju Smile

Mimo to nestálo by za to použít OGL nebo něco takového? Potřebuju aby to běhalo na kancelářkém pc a nevím jak je na tom java a její Graphics a Graphics 2D s rychlostí a abych byl schopnej toto provádět dejme tomu s 200 Shapes(ikdyž tyto výpočty provedu jednou a pak už jen budu kreslit Lines a Shapes).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
lovci



Založen: 04. 12. 2009
Příspěvky: 12

PříspěvekZaslal: 5. prosinec 2009, 18:21:59    Předmět: rychlost Odpovědět s citátem

Mám ještě jeden dotaz Smile.
Nestálo by za to použít nějake to OGL nebo jine 3D rozhraní pro javu?
Nebylo by vykreslování přes GPU rychlejší a práce s funkcema typu vyplnení ploch hotové?Nebo použití JPanelu jako canvas je dost optimalizované a vytáhne z železa "veškerý" výkon pro zobrazení 2D? Skusím si to v praxi, ale ted mě honí čas Sad a nemužu si dovolit zkoušet různá řešení, díky.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1047

PříspěvekZaslal: 5. prosinec 2009, 18:37:14    Předmět: Odpovědět s citátem

no myslim ze cez OpenGL by to bolo rychlejsie. ale jedine co by to ulahcilo by bolo kreslenie ciar a ich vyplnanie. vsetko ostane je treba pocitat rucne.
_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
lovci



Založen: 04. 12. 2009
Příspěvky: 12

PříspěvekZaslal: 5. prosinec 2009, 23:21:55    Předmět: OpenGL Odpovědět s citátem

hm tak to na to prdím, nějakej extra výkon nepotřebuju, spíš mi jde o to vyplnění ploch..mě by zajimalo jak to, že to nejde tak jednoduše jako dřív, bylo to tím, že předtím se používala pixelová grafik a ted v java vektorová?

Takže to budu kreslit přes java 2D jenom nevím jak grabnout pixely z JPanelu, nebo jak kreslit do image.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
slax



Založen: 07. 09. 2009
Příspěvky: 11

PříspěvekZaslal: 6. prosinec 2009, 12:44:22    Předmět: Odpovědět s citátem

do obrazkov sa da kreslit cez Graphics2D

BufferedImage img = new BufferedImage(10, 10, BufferedImage.TYPE_INT_ARGB);

Graphics2D g2 = img.createGraphics();

farbu pixelu ziskas cez

http://java.sun.com/j2se/1.5.0/docs/api/java/awt/image/BufferedImage.html#getRGB(int, int)

nieco ako: new Color(img.getRGB(5, 5);

a tutorial k tomu je tu:
http://java.sun.com/docs/books/tutorial/2d/index.html
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
lovci



Založen: 04. 12. 2009
Příspěvky: 12

PříspěvekZaslal: 6. prosinec 2009, 17:05:16    Předmět: dík Odpovědět s citátem

>slax
Tak to vypadá na přesně to co potřebuju dík moc Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Java / J2ME Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna