Witajcie! Na grafikę komputerową mamy napisać program w którym będzie się wyświetlał z lewej strony obraz wczytany bez skalowania a z prawej ten sam obraz ale już po obróbce graficznej. Samo okno aplikacji już napisałem, teraz została sprawa tego jak napisać filtr medianowy. Mam panel w którym pobieram maskę 3x3, obrazek jest w bufferedimage, wiem jak działa takie filtrowanie ale po uruchomieniu aplikacji z moim kodem eclipse wywala mi całą listę błędów.
Robię to mniej więcej w ten sposób:
-
wczytuje w pętlach(obr to mój bufferedimage)
int rgb=obr.getRGB(j, i);
int r=(rgb >> 16) & 0x000000FF;
int g=(rgb >>8 ) & 0x000000FF;
int b=(rgb) & 0x000000FF;
2.wczytuje dla każdego z kolorów wartości pikseli dookoła -
korzystając z wzoru liczę sobie nowy piksel:
s=f−1,−1∙ai−1,j−1+f0,−1∙ai,j−1+f1,−1∙ai+1,j−1+f−1,0∙ai−1,j+f0,0∙ai,j+f1,0∙ai+1,j+f−1,1∙ai−1,j+1+f0,1∙ai,j+1+f1,1∙ai+1,j+1
4.potem metodą znalezioną w sieci robię
public int createRGB( int r, int g, int b ) {return ((r & 0xff) << 16) | ((g & 0xff) << 8) | (b & 0xff); }
5.na koniec zostało już tylko zrobic image.setRGB(j, i, spixel);
mógłby mi ktoś powiedzieć gdzie robię błąd? albo jak to poprawnie zrobić? łeb mi już pęka, szukam od kilku godzin tego w necie i nie mogę nic znaleźć sensownego. W piątek na zajęciach będziemy to pisać i kilka innych filtrów a nikt nam nie tłumaczył jak działać z obrazkami w javie...