Diskuze: aproximace bitové mapy pixelů polygony

Aktivity (2)
Avatar
Vojta
Člen
Avatar
Vojta:16. března 23:09

Rád bych se dozvěděl, jak mohu z bitmapy, ve které jsou uloženy rgb hodnoty pixelů (černou barvou jsou ohraničena teritoria), dostat aproximaci v podobě polygonů (list/ vektor bodů). Nepotřebuji žádný konkrétní source code, spíše nějaký algoritmus.
V příloze posílám příklad, jak by mohla vypadat taková mapa (mimochodem proč nepodporujete bmp soubory jako přílohu?). Černá barva tedy představuje hranice mých polygonů.

Zkusil jsem: Nevím úplně, jak si s tím poradit. Zkusil jsem něco vygooglit, ale moc jsem toho nenašel.

Chci docílit: Vytvářím digitální podobu deskové hry risk a rád bych, aby hrací deska (mapa světa) byla v očích hry reprezentována jako list/ vektor bodů. Problém nastává v tom, že moje mapa světa, kterou chci použít, je ve formátu bitmapy. Další způsob, jak docílit toho, co chci, by bylo na hulváta prostě ty souřadnice bodů vypsat, ale kdybych později chtěl takto překonvertovat víc map, tak mi to přijde jako blbost.

 
Odpovědět 16. března 23:09
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Vojta
DarkCoder:17. března 1:02

Představ si klasické dětské omalovánky. Bílý podklad, na něm mapa světa, na které jsou černou barvou vyznačeny jednotlivá teritoria. Každá souřadnice bitmapy má tedy nějakou barvu, v tuto chvíli pouze bílou nebo černou. Pokud bude kliknuto na souřadnici, jejíž barva je černá, nic neděláš. Pokud bude bílá (to je to co potřebuješ), tak musíš zjistit všechny sousední souřadnice, sousední sousedních, ve kterých je ta samá barva. Tedy dokud nenarazíš na černou, představující ohraničení teritoria. Zjednodušeně potřebuješ vytvořit algoritmus výplně, jako bys to nějakou barvou vymalovával - klasická vlna. Všechny tyto souřadnice si pak přiznačíš nějakou barvou nebo hodnotou. Tím získáš daný polygon. Toto můžeš udělat kdykoli za běhu programu. Můžeš si to ale také předgenerovat. Uchováváš si tak souřadnice bodů pro tu danou hodnotu. Hodnoty každého teritoria si můžeš vygenerovat. Začneš levým horním rohem, končíš pravým spodním. Aplikuješ algoritmus výplně postupně pro každou neohodnocenou souřadnici a celá teritoria si ohodnocuješ přirozenými čísly. Nulová hodnota znamená okraj teritoria, který je pro tebe nezajímavý, nenulová konkrétní teritorium.

Tedy získáš souřadnici kliku do bitmapy, ze souřadnice vytáhneš hodnotu, aplikuješ algoritmus výplně nebo si vytáhneš ze souboru, paměti, seznam všech souřadnic pro danou hodnotu na které chceš aplikovat nějaký efekt (změnu barvy, potažení texturou, apod.).

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 17. března 1:02
"„Učíš-li se proto, aby sis zapamatoval, zapomeneš. Učíš-li se proto, abys porozuměl, zapamatuješ si."
Avatar
Kenvil
Člen
Avatar
Odpovídá na Vojta
Kenvil:17. března 4:17

Ahoj, zkus mrknout na toto
Read_pixel_va­lue_in_BMP

 
Nahoru Odpovědět 17. března 4:17
Avatar
Vojta
Člen
Avatar
Odpovídá na DarkCoder
Vojta:17. března 9:31

Díky za radu, nejdřív mě něco takového taky napadlo, ale nemyslel jsem si, že by to stačilo, ale jak teď nad tím přemýšlím, tak je to vlastně úplně ideální řešení.

 
Nahoru Odpovědět 17. března 9:31
Avatar
Borek
Člen
Avatar
Odpovídá na Vojta
Borek:29. července 8:23

Zkusil jsi vyhledat v Googlu "hranový detektor" ?

 
Nahoru Odpovědět 29. července 8:23
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.