Fala pessoal!! Sou mais um que está tentando fazer um trabalhinho de faculdade e estou precisando de uma ajudinha
Missão: fazer um programa em java que faça uma convolução dado um determinado filtro em uma imagem utilizando JAI.
Apesar do JAI já ter métodos que fazem isso, meu professor quer que nós implementamos o nosso próprio método.
Pois bem, nas minhas tentativas, cheguei ao seguinte código:
[code]package filtro.com.br;
import java.awt.;
import java.awt.image.;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.media.jai.*;
import javax.imageio.ImageIO;
import javax.media.jai.JAI;
import javax.media.jai.PlanarImage;
import javax.media.jai.RasterFactory;
import javax.media.jai.iterator.RandomIter;
import javax.media.jai.iterator.RandomIterFactory;
public class Filtro {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
float[][] valoresKernel = {{-1,0,-1},{-2,0,2},{-1,0,1}};
String caminho = "E:\\Documentos\\Eclipse\\Filtro\\filtro\\com\\br\\JessicaAlba.bmp";
PlanarImage img = JAI.create("fileload", caminho);
int largura = img.getWidth();
int altura = img.getHeight();
float[] acum = new float[largura*altura];
SampleModel sm = img.getSampleModel();
for (int y=1; y<=altura-2;y++) {
for (int x=1;x<=largura-2;x++) {
for(int yk=0; yk<=2; yk++) {
for (int xk=0; xk<=2; xk++){
int j = xk-1;
int k = yk-1;
float[] pixel = sm.getPixel(x+j, y+k, (float[]) null, img.getData().getDataBuffer());
acum[y*largura+x] += valoresKernel[xk][yk] * (pixel[0]/255);
if (acum[y*largura+x]>1) acum[y*largura+x] = 1;
if (acum[y*largura+x]<0) acum[y*largura+x] = 0;
//acum[y*largura+x] = acum[y*largura+x]/255;
}
}
}
}
javax.media.jai.DataBufferFloat dbuffer = new javax.media.jai.DataBufferFloat(acum,largura*altura);
SampleModel sampleModel =RasterFactory.createBandedSampleModel(DataBuffer.TYPE_FLOAT,largura,altura,1);
ColorModel colorModel = PlanarImage.createColorModel(sampleModel);
Raster raster = RasterFactory.createWritableRaster(sampleModel,dbuffer,new Point(0,0));
TiledImage tiledImage = new TiledImage(0,0,largura,altura,0,0, sampleModel,colorModel);
tiledImage.setData(raster);
JAI.create("filestore",tiledImage,"C:\\teste.tif","TIFF");
}
}
[/code]
Porém, a imagem resultante não abre em nenhum programa.
Pergunto-lhes: o que eu estou fazendo de errado?