Salve a tutti! Sto provando a realizzare un software per l'elaborazione di immagini. Nulla di che in realtà, visto che mi serve per l'uni.
L'obiettivo è quello di applicare semplici filtri alle immagini (tipo sfocatura, messa a fuoco, etc.) utilizzando i metodi della classe BufferedImage.
Per realizzare l'effetto smoothing ad esempio (sfocatura) si fa così:
- si suddivide l'immagine in matrici 3x3 pixel
- per ogni matrice si prendono i valori del colore
- si fa la media (totale/9)
- si sostituisce il valore dei 9 pixel della matrice con il risultato appena ottenuto (ossia la media)

semplice, no? a dirsi... a farsi non tanto!! Oddio... l'algoritmo è semplice ma il risultato è sballato!!

Ho paura che il problema sia sui metodi getRGB e setRGB della classe BufferedImage che mi restituiscono un colore in chissà quale scala!

Io ho scritto questo codice e dovrebbe andare bene, ma ovviamente il risultato è tutt'altro che una sfocatura...

codice:
public static BufferedImage smoothingFilter(BufferedImage img){
		int[] array = new int[9];
		int i=0;
		int tempX = 1;
		int tempY = 1;
		
		for(tempY=1; tempY<=(img.getHeight()-3); tempY+=3){    //ripeto l'operazione per ogni riga
			for(tempX=1; tempX<=(img.getWidth()-3); tempX+=3){  //ripeto l'operazione per ogni colonna
				for(int x=tempX; x<tempX+3; x++){
					for(int y=tempY; y<tempY+3; y++){
						array[i] = img.getRGB(x,y);  //memorizzo i valori in un array grande 9
						i++;
					}
				}	
				int somma = 0;
				for (i=0; i<array.length; i++){
					somma += (array[i]/9); //faccio la media
				}
				for(int x=tempX; x<tempX+3; x++){
					for(int y=tempY; y<tempY+3; y++){
						img.setRGB(x,y,somma/9); //imposto il nuovo colore per i 9 pixel della matrice
					}
				}	
				i=0;
			}
		}
		return img;
	}
Qualcuno saprebbe aiutarmi o ha qualche idea in mente?
Grazie mille!!!
ciaooo