Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SDL] "Color Keying"...

Ostatnio zmodyfikowano 2011-10-28 13:13
Autor Wiadomość
mattheo
Temat założony przez niniejszego użytkownika
[SDL] "Color Keying"...
» 2011-10-28 10:45:52
Witam. Otoz mam problem z wycienciem zbednego tla z obrazkow otoz uzywam do tego takiej funkcji :

C/C++
SDL_Surface * load_img( std::string filename ) //zaladowanie i optymalizacja obrazka
{
    SDL_Surface * ldimg = NULL; //zaladowany obrazek
    SDL_Surface * opimg = NULL; //zoptymalizowany obrazek
   
    ldimg = IMG_Load( filename.c_str() );
   
    if( ldimg != NULL )
    {
        opimg = SDL_DisplayFormat( ldimg );
        SDL_FreeSurface( ldimg );
    }
    if( opimg != NULL )
    {
        Uint32 colorkey = SDL_MapRGB( opimg->format, 0x00, 0xFF, 0xFF );
        SDL_SetColorKey( opimg, SDL_SRCCOLORKEY, colorkey );
    }
    return opimg;
}
Lecz po wycienciu nadal zostawia "resztki" co niezbyt ladnie wyglada oto przyklad: http://imageshack.us/photo/my-images/231/lolllqd.jpg/
jak pozbyc sie owego obrysu? Moze to problem nie odpowiedniego formatu jaki bylby najlepszy do gry?
P-42903
DejaVu
» 2011-10-28 10:58:43
Może wystarczy wyłączyć antyaliasing dla tej tekstury? Osobiście to poleciłbym Ci bibliotekę SFML - tam masz wsparcie chociażby dla formatu plików *.png, a *.png obsługuje kanał alfa, więc nie musisz się bawić w obrabianie obrazu tylko wczytujesz to co chcesz mieć. Przykładowo w SFML-u cała Twoja praca z obrazkiem sprowadziłaby się do:
C/C++
sf::Image obraz;
obraz.LoadFromFile( "obrazek.png" );
/edit:
Natomiast co do SDL-a to jak już wspomniałem sugeruję spróbować wyłączyć antyaliasing (o ile coś takiego w ogóle tam jest).
P-42904
mattheo
Temat założony przez niniejszego użytkownika
» 2011-10-28 11:24:11
to niestety nie rozwiazuuje mojego problemu.. bo ja musze to zrobic w SDLu.. cos wyczytalem na temat zapisu obrazku w formacie png z uzyciem kanalu alpha lecz nie potrafie tego zrobic :/
P-42905
DejaVu
» 2011-10-28 11:26:12
Nie wiem czy SDL obsługuje format plików *.png... generalnie w SDL-u tworzy się bitmapę z kolorem różowym i potem ten różowy robi za kolor przezroczysty.
P-42906
mattheo
Temat założony przez niniejszego użytkownika
» 2011-10-28 11:34:05
obsluguje gdy dodamy dodatkowa biblioteke i niby nie musi byc kolor rozowy tym tlem mozna ustawic niby na inny coz moze z rozowym sie uda.
P-42909
kamillo121
» 2011-10-28 12:01:39
Samo SDL jako tako nie obsługuje plików o formacie PNG, lecz dodatkowa biblioteka SDL_Image obsługuje większość popularnych formatów. Skoro usuwa kolor kluczowy i zostawia tylko jakąś część to sprawdź w programie graficznym czy przy kompresji nie zmienił się kolor.
Zapis pliku png z alpha zapisuje się z reguły tak samo jak zwykły png. Masz program graficzny usuwasz tło i zapisujesz.
Jeżeli chcesz uzyskać lepszą jakość to zapisuj to np w BMP, gdzie strat nie ma. Ustaw sobie kolor którego nie używasz na obrazkach i go usuwaj przy wczytywaniu.
Jeżeli nic nie kombinujesz z ustawieniami buforów to na 99,9% nie jest to wina biblioteki.

 
P-42912
mattheo
Temat założony przez niniejszego użytkownika
» 2011-10-28 13:13:30
problem rozwiazany ;D w gimpie udalo mi sie zrobic png ktorego po wczytaniu i odcieciu tla nie zostawia tego brzydkiego obrysu :D temat do zamkniecia
P-42913
« 1 »
  Strona 1 z 1