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
Jakie rodzaje plików graficznych ma obsługiwać program?
bmp:)
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;)).
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:-(
W jakim środowisku piszesz??
program ma działać pod solarisem(unix) ale głównie programuje w Dev-C++ pod windowsem:)
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!
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.
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 ;)