C++ i obsługa plików graficznych

0

Witam, mam napisać pewien programik i powiem na wstępie że trochę mnie on przeraża... Mianowicie mam napisać obiektowo program który wczytuje pewien plik graficzny, znajduje w nim pewien obszar ograniczony konturem i zamienia ten obszar na jakiś inny, tzn np. mamy w pliku graficznym jakiś obrazek na którym widoczny jest znak drogowy i chcemy żeby program ten znak zamieniał na inny. Szczerze mówiąc nie mam pojęcia jak się za to zabrać :-( Będę wdzięczny za każdą pomoc i z góry dziękuję za jakiekolwiek wskazówki. Pozdro

0

Jakie rodzaje plików graficznych ma obsługiwać program?

0

bmp:)

0

Czyli będzie prosto ;) Wyszukaj na Googlu strukturę pliku BMP i naucz się wczytywać pliki. Potem napisz strukturę, która będzie reprezentować plik BMP. Następnie napisz klase zawierającą f-cje wczytujące, zapisujące itp itd. Na koniec zależnie od tego w jakiej formie będziesz otrzymywać dane, napisz funkcje podmieniającą dany obszar (Tutaj musisz DOKŁADNIE wiedzieć co dostajesz i w jaki sposób masz to interpretować). Pamiętaj żeby pilnować pointerów, sprawdzać alokację i zwalniać pamięc.

Zasadniczo pliki BMP są proste jak budowa cepa i można bez większych problemów samemu je rozpracować, wystarczy mieć odrobinę czasu, więc jeśli termin wykonania nie jest zbyt bliski, to zachęcam do własnoręcznego rozkładania(hexeditor + paint w łapę i do roboty;)).

0

Dzięki za odpowiedź ale czy mógłbyś mi wytłumaczyć dokładniej jak to zrobić bo nadal nie rozumiem:-( Szczerze mówiąc to nie jestem za dobry w te klocki:-( Może mógłbyś podesłać jakąś bibliografie na ten temat?? albo zapodać jakiegoś linka jak co działa. Poza tym chyba trzeba będzie użyć jakiegoś algorytmu do znajdowania określonego konturu a sam chyba tego nie wymyśle:-(

0

W jakim środowisku piszesz??

0

program ma działać pod solarisem(unix) ale głównie programuje w Dev-C++ pod windowsem:)

0

Podłączę się do wątku, bo mam taki sam temat projektu. Generalnie nie wiem od czego zacząć, moje największe dzieło to bardzo prosta baza danych, a to trochę odbiega od tego :)

Póki co znalazłem coś takiego: http://www.pages.drexel.edu/~weg22/edge.html
Jeszcze tego nie rozgryzłem, ale mam nadzieje, że jest tam coś, co się nam przyda ;)

//q: fajny art, milo sie czyta!

0

Pozwolę sobie odświeżyć temat.

Poznawanie budowy bmp to straszna męczarnia dla takiego laika jak ja ;) Jednak z pomocą przyszła mi łatwa w obsłudze biblioteka EasyBMP.
http://easybmp.sourceforge.net/

Potrzebuję jeszcze algorytmu do wykrywania krawędzi. Jako, że gotowego nie znalazłem, spróbowałem swych sił w napisaniu własnego na podstawie:
http://pl.wikipedia.org/wiki/Krzy%C5%BC_Robertsa
http://homepages.inf.ed.ac.uk/rbf/HIPR2/roberts.htm

    int i,j;
    double sumx = 0, sumy = 0;
    
    for(j=0; j < Image.TellHeight() - 1; j++)
    {
             for(i=0; i < Image.TellWidth() - 1; i++)
             {
                  sumx = abs(Image(i,j) - Image(i+1,j+1));
                  sumy = abs(Image(i+1,j) - Image(i,j+1));
                  Image(i,j) = (sumx + sumy);
             }
     }

gdzie Image jest obiektem klasy BMP z biblioteki EasyBMP.

Przy kompilowaniu wyskakuje mi taki błąd: non-lvalue in assignment dla tego wiersza:

Image(i,j) = (sumx + sumy)

Szczerze nie mam nawet pojęcia czy to, co napisałem jest choć trochę zbliżone do prawidłowego algorytmu. Dlatego proszę was o pomoc.

0

technicznie problem znajdowania krawędzi polega na tym aby najpierw w pionie a potem w poziomie szukac miejsc gdzie gwaltownie zmienia sie odcien piksela np dla obrazow czarno-bialych z czarnego na bialy albo z bialego na czarny, polecam http://home.agh.edu.pl/~lesniak/wyklady/obrazy.html , ktores z ostatnich wykladow. wszystkie metody opisane ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1