Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
frantta
Založen: 03. 12. 2009 Příspěvky: 11
|
Zaslal: 15. únor 2010, 17:46:18 Předmět: hodnota barvy obrázku |
|
|
Zdravím, potřebuji poradit jak získám v SDL (OpenGL) hodnotu (číslo) daného pixelu z obrázku - výškové mapy.
Taky bych chtěl potvrdit (vyvrátit) jestli je dobré (a možné) použít formát gif - 8 bitů - to by na výškovou mapu stačilo, popřípadě jaký formát by byl lepší...
Děkuji |
|
Návrat nahoru |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
Zaslal: 15. únor 2010, 18:26:10 Předmět: |
|
|
struktura SDL_Surface ma pixels co su surove data pixelov obrazka. vid http://sdl.beuc.net/sdl.wiki/SDL_Surface
mas tam w,h co obsahuju vysku sirku obrazku potom pitch co je pocet bajtov na riadok obrazku. _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
 |
frantta
Založen: 03. 12. 2009 Příspěvky: 11
|
Zaslal: 15. únor 2010, 19:06:09 Předmět: |
|
|
Není mi jasné jek získám hodnotu určitého pixelu. Získám ho nějak pomocí surface->pixels? |
|
Návrat nahoru |
|
 |
frca

Založen: 28. 07. 2007 Příspěvky: 1561
|
Zaslal: 15. únor 2010, 20:40:49 Předmět: |
|
|
Lepší je png. Na přečtení použij libpng. Pak získání hodnoty pixelu probíhá pomocí této knihovny nezávisle na OpenGL nebo SDL. Pokud chceš nějaký příklad na použití libpng, SDL a OpenGL dohromady, tak tady. Zrovna to použití libpng je tam opravdu zjednodušené. _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
 |
yaqwsx
Založen: 25. 02. 2008 Příspěvky: 66
|
Zaslal: 15. únor 2010, 21:09:41 Předmět: |
|
|
Přímý přístup k pixelům v SDL_Surface je popsán v seriálu o SDL na Rootu tady |
|
Návrat nahoru |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
|
Návrat nahoru |
|
 |
frantta
Založen: 03. 12. 2009 Příspěvky: 11
|
Zaslal: 15. únor 2010, 22:24:47 Předmět: |
|
|
chtěl bych zkusit to png, jak v tom získám hodnotu daného pixelu? Nebo kde to najdu v tom zdrojáku?
Dikk |
|
Návrat nahoru |
|
 |
frca

Založen: 28. 07. 2007 Příspěvky: 1561
|
Zaslal: 15. únor 2010, 22:47:38 Předmět: |
|
|
loadpng.cpp, loadpng.h (složka common)
Zaměř se na třídu LoadPng. Na získání pixelů je tam fce getpx.
Použití např.:
obrazek.getpx()[x+y*obrazek.getw()]; // píšu to z hlavy, přesnější (a kompletnější) příklad najdeš, když prohledáš všechny ty zdrojáky.
Hlavně si uvědom, že získaná hodnota je 32-bitový int ve tvaru RGBA. Takže konkrétní kanál si budeš muset odshiftovat/odmaskovat, případně použít pomocnou třídu ConvPng. Použití bude taky někde v těch zdrojácích. _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
 |
frantta
Založen: 03. 12. 2009 Příspěvky: 11
|
Zaslal: 15. únor 2010, 22:53:36 Předmět: |
|
|
to nemůžu uložit png v 8bitovém formátu? Nepotřebuji barvy, 256 úrovní na výškovou mapu stačí... |
|
Návrat nahoru |
|
 |
nou

Založen: 28. 07. 2007 Příspěvky: 1050
|
Zaslal: 15. únor 2010, 23:02:58 Předmět: |
|
|
no to png moze byt ulozene ako 8 bitove ale je dost pravdepodobne ze napriek tomu sa to skonveruje na int. za druhe velkostne by mal byt 256 farebny obrazok rovnak ci je uz ulozeny ako 8bit alebo 24bit. _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
 |
frca

Založen: 28. 07. 2007 Příspěvky: 1561
|
Zaslal: 15. únor 2010, 23:43:33 Předmět: |
|
|
frantta napsal: |
to nemůžu uložit png v 8bitovém formátu? Nepotřebuji barvy, 256 úrovní na výškovou mapu stačí... |
Můžeš. Ta moje třída funguje tak, že každý obrázek převede na RGBA. Takže si klidně načti obrázek v 256-ti stupních šedé a pak použij pouze červený kanál. Toto je ale specifikum té mojí třídy, se samotnou libpng se dají dělat mnohem větší vylomeniny. Však jsem psal, že je to maximálně zjednodušené.
Najdi si ve zdrojácích třeba řetězec "brickwall01-bump.png". To je obrázek, o kterém se předpokládá, že je ve stupních šedi, a podle toho je s ním naloženo. Z tohoto příkladu můžeš vycházet při načítání svého vlastního obrázku ve stupních šedi. _________________ www.FRANTICWARE.com |
|
Návrat nahoru |
|
 |
|