aee pessoal, to precisando da ajuda de vcs novamente!!!
eu to precisando fazer um programa q mostre uma imagem e a armazene em um objeto Raster. Eu acho q consegui armazenar a imagem no objeto Raster, pq quanto eu dou raster.getWidth ou raster.getHeigth eu consigo pegar as dimensões da minha imagem, mas soh que eu naum to conseguindo mostrar a imagem corretamente no Canvas, ela aparece desconfigurada. Se alguem puder me ajudar agradeço
Valeu
Código da classe principal
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import java.awt.image.*;
import java.net.URL;
import java.net.URL;
import java.io.*;
import javax.imageio.ImageIO;
public class TrabFatima3 extends javax.swing.JFrame {
JButton jButton1;
JFrame frame;
JFileChooser chooser;
JLabel label,label2;
String nomearq,nomepath,arquivo;
Container container;
JPanel painelImagem = new JPanel();
JPanel painelAlturaLargura = new JPanel();
int nCols;
int nLins;
MyCanvas c1;
public TrabFatima3() {
try {
setSize(1024,768);
//declaração do botão
jButton1 = new javax.swing.JButton();
container = getContentPane();
container.setLayout(new BorderLayout());
//Operação de fechamento de frame
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Cria painel para botao
JPanel painelBotao = new JPanel();
//Adiciona botão no painel
painelBotao.add(jButton1);
//Adiciona Painel de botão na frame
container.add(painelBotao, BorderLayout.SOUTH);
//Evento no Botão para selecionar a imagem
jButton1.setText("Procurar");
jButton1.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
frame = new JFrame("Carregar Imagem");
chooser = new JFileChooser();
chooser.showOpenDialog(frame);
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
// Pegar o arquivo no diretório
File file = chooser.getSelectedFile();
//carregar o arquivo
if (file==null || file.getName().equals(""))
System.out.println("nome do arquivo inválido: ");
else {
nomearq = file.getName();
nomepath= file.getPath();
arquivo = nomepath;
System.out.println("nome do arquivo: "+arquivo);
URL url = null;
try {
url = file.toURL();//fornece o path do arquivo na forma file:/C:/.....
System.out.println("URL: "+url);
} catch (Exception exception) {
}
c1 = new MyCanvas(null);
GreyImage gi;
Raster rs = null;
try {
gi = GreyImage.createImage(url);
c1.setImage(gi);
rs = gi.getRaster();
nCols = rs.getWidth();
nLins = rs.getHeight();
}catch(IOException IOe) {
IOe.printStackTrace();
}
//adiciona a altura e largura em outro label
label2 = new JLabel("Altura: "+nCols+" Largura: "+nLins, SwingConstants.CENTER);
//limpa paineis (para nova imagem aberta)
painelImagem.removeAll();
painelAlturaLargura.removeAll();
//adiciona labels aos paineis
painelImagem.add(c1);
painelAlturaLargura.add(label2);
//adiciona os dois paineis no container
container.add(painelImagem, BorderLayout.CENTER);
// container.add(c1, BorderLayout.CENTER);
container.add(painelAlturaLargura, BorderLayout.NORTH);
frame.pack();
frame.setVisible(false);
//atualiza frame
container.validate();
}
}});
}catch(Exception e) {
e.printStackTrace();
}
show();
}
/*
void Media() {
int l,c,tl,tc;
float soma;
int Sl;
for(l=1;l==nLins-2;l++) {
for(c=1;c==nCols-2;c++) {
soma=0;
for(tl=l-1;tl==l+1;tl++) {
for(tc=c-1;tc==c+1;tc++) {
soma=soma+
}
}
}
}
}*/
public static void main(String args[]) {
new TrabFatima3();
}
}
essa a classe do meu canvas
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.image.*;
import java.net.URL;
import java.net.URL;
import java.io.*;
import javax.imageio.ImageIO;
public class MyCanvas extends Canvas {
BufferedImage bi;
public MyCanvas(BufferedImage b) {
bi = b;
}
public void paint(Graphics g) {
System.out.println(bi);
if ( getImage() != null )
g.drawImage(getImage(), 0, 0, null);
}
public BufferedImage getImage() {
return bi;
}
public void setImage(BufferedImage b) {
repaint();
bi = b;
setSize(new Dimension(b.getWidth(),b.getHeight()));
}
}
e essa aqui eh uma outra classe que eu utilizei para pegar a imagem, vários metodos dela eu nao estou utilizando
//package images;
import java.net.URL;
import java.awt.*;
import java.awt.image.*;
import java.io.*;//utilizado no throws IOException
import javax.imageio.ImageIO;// utilizado para o read do ImageIO.read()
public class GreyImage extends BufferedImage
{
public GreyImage(int w, int h)
{
super(w,h, TYPE_BYTE_GRAY);
}
static public GreyImage createImage(URL m)
throws IOException
{
Toolkit tc = Toolkit.getDefaultToolkit();
Image im = ImageIO.read(m);
BufferedImage bi = (BufferedImage) im;
GreyImage gi = new GreyImage(bi.getWidth(), bi.getHeight());
gi.setData(bi.getRaster());
return gi;
}
public int[] original(int k)
{
Raster rs = getRaster();
int nCols = rs.getWidth();
int nLins = rs.getHeight();
int[] I = rs.getPixels(0, 0, nCols, nLins, (int[]) null);
return I;
}
public int[] threshold(int thres)
{
Raster rs = getRaster();
int nCols = rs.getWidth();//numero de colunas
int nLins = rs.getHeight();//numero de linhas
int index = 0;
int[] I = rs.getPixels(0, 0, nCols, nLins, (int[]) null);//numero de pixel da imagem
int[] dy = (int []) I.clone();//numero de pixel da imagem
for (int i = 0; i < nLins ; i++)
{
for (int j = 0; j < nCols; j++)
{
if ((I[i * nCols + j])> thres)
dy[index++] = 255;//se fizermos receber 0 ou 255 o fundo ficará preto
else
dy[index++] = 0;
}//fim do for
}//fim do for
return dy;
}
public int[] boxRim(int box)
{
Raster rs = getRaster();
int nCols = rs.getWidth();
int nLins = rs.getHeight();
int[] I = rs.getPixels(0, 0, nCols, nLins,(int[]) null);
int[] dy = (int []) I.clone();
int i,j,k,l,cor,cor1;
int mat[][]=new int[nLins][nCols];
double contr;
double Melhoria_Ponto[][] = {{0.75,0.75,0.75},
{0.75,1,0.75},
{0.75,0.75,0.75}};
//laço que transforma a imagem em uma matriz com seus valores de cinza
for(i=0; i<nLins; i++)
{
for (j=0; j<nCols; j++)
{
mat[i][j]=I[i * nCols + j];
}//fim do for
}// fim do for
for(i=4; i<nLins-4; i++)
{
for (j=4; j<nCols-4; j++)
{
contr=0;
for(k=-1; k<2; k++)
for(l=-1; l<2; l++)
contr=contr + (mat[i+k][j+l]*Melhoria_Ponto[l+1][k+1]);
for(k=3; k<5; k++)
for(l=-4; l<5; l++)
{
contr=contr - (mat[i+k][j+l]*0.125);
contr=contr - (mat[i-k][j+l]*0.125);//erro
}// fim dor for
for(k=-2; k<3; k++)
for(l=3; l<5; l++)
{
contr=contr - (mat[i+k][j+l]*0.125);
contr=contr - (mat[i+k][j-l]*0.125);
}//fim do for
if(contr>255)
contr=255;
if (contr<0)
contr=0;
dy[i*nCols+j]= (int) Math.round(contr);
}//fim do for
}//fim dor for
return dy;
}// fim do boxRim
public int[] thresholdG(double thresG)
{
Raster rs = getRaster();
int nCols = rs.getWidth();
int nLins = rs.getHeight();
int index=0;
int[] I = rs.getPixels(0, 0, nCols, nLins,(int[])null);
int[] dy = (int []) I.clone();
int[] Histograma = new int[256];
double NumPontos,contador;
int cor,i,h,j,w,l;
int mat[][]=new int[nLins][nCols];
//for 1: armazena na matriz mat[i][j] a imagem que está no vetor I[]
for (i = 0; i < nLins; i++)
{
for (j = 0; j< nCols; j++)
{
mat[i][j]=I[i * nCols + j];
}//fim do for
}// fim do for
System.out.println(+nCols);
System.out.println(+nLins);
//for 2: inicialliza todas as posições do vetor Histograma[i]=0
for (i=0; i==255; i++)
Histograma[i]=0;
//for 3: percorre toda a matriz mat[i][j] e armazena na variavel cor os valores
//de nivel de cinza de cada pixel
//o vetor Histrograma[cor] armazenará a quantidade de cada nivel de cinza da imagem
for (i = 0; i < nLins; i++)
for (j = 0; j< nCols; j++)
{
cor=mat[i][j];
Histograma[cor]= Histograma[cor]+1;
}// fim do for
contador=0;
i=0;
h=nLins;
w=nCols;
NumPontos=h*w;
while(contador <(NumPontos*thresG))
{
contador=contador+Histograma[i];
i=i+1;
if (i>255) break;//i deve para em 255, porque o tamanho do vetor Histograma[i]==256.
}// fim do while
if (i>255)
i=255;
for (l = 0; l <nLins; l++)
{
for (j = 0; j<nCols; j++)
{
mat[l][j]=I[l * nCols + j];
cor=mat[l][j];
if (cor<=(i-1))
dy[index++] = 0;
else
dy[index++] = 255;
}//fim do for
}// fim do for
return dy;
}// fim do thresholG
public int[] MMatematicaBinaria(double mate)
{
Raster rs = getRaster();
int nCols = rs.getWidth();
int nLins = rs.getHeight();
int index = 0;
int[] I = rs.getPixels(0, 0, nCols, nLins,(int[])null);
int[] dy = (int []) I.clone();
int p1,p2,p3,p4,p5,i,j, eliminar;
int mat[][]=new int[nLins][nCols];
for(i=0; i<nLins; i++)
{
for (j=0; j<nCols; j++)
{
mat[i][j]=I[i * nCols + j];
}//fim do for
}// fim do for
for(i=1; i<nLins-2; i++)
{
for (j=1; j<nCols-2; j++)
{
eliminar=1;
p1=mat[i][j-1];
p2=mat[i-1][j];
p3=mat[i][j+1];
p4=mat[i+1][j];
p5=mat[i][j];
if (p1+p2+p5==765) eliminar=0;
if (p1+p4+p5==765) eliminar=0;
if (p2+p3+p5==765) eliminar=0;
if (p3+p4+p5==765) eliminar=0;
if (p1+p3+p5==765) eliminar=0;
if (p2+p4+p5==765) eliminar=0;
if(eliminar==1)
dy[i*nCols+j]=0;
}//fim do for
}// fim do for
return dy;
}//fim MMatematicaBinaria
public int[] thresholdL(double NS_DP)
{
Raster rs = getRaster();
int nCols = rs.getWidth();
int nLins = rs.getHeight();
int index = 0;
int[] I = rs.getPixels(0, 0, nCols, nLins,(int[])null);
int[] dy = (int []) I.clone();
int mat[][]=new int[nLins+56][nCols+56];
int i,j;
for(i=0; i<nLins; i++)
{
for (j=0; j<nCols; j++)
{
mat[i][j]=I[i * nCols + j];
}//fim do for
}//fim do for
for(i=0; i<nLins-1; i++)
{
for (j=0; j<nCols-1; j++)
if (mat[i][j]==255)
{
int l,k,xSup,ySup, xInf,yInf;
double somador, media, DesvioPadrao,s;
somador=0;
if (i>25)
xInf=25;
else
xInf=i;
if (i<nLins-26)
xSup=25;
else
xSup=nLins-(i+1);
if(j>25)
yInf=25;
else
yInf=j;
if (j<nCols-26)
ySup=25;
else
ySup=nCols-(j+1);
for (l=i-xInf; l<i+xSup; l++)//a partir do i=206 dá erro
for(k=j-yInf; k<j+ySup; k++)
somador = somador + mat[l][k];
media= somador/((xSup+xInf+1)*(ySup+yInf+1));
somador=0;
for (l=i-xInf; l<i+xSup; l++)
for(k=j-yInf; k<j+ySup; k++)
somador = somador+ (double) Math.pow((mat[l][k]-media),2);
DesvioPadrao= (double) Math.sqrt(somador /((xSup + xInf + 1)*(ySup + yInf + 1)));
if (mat[i][j]<(media + (NS_DP*DesvioPadrao)))
dy[i*nCols+j]=0;
}//fim do if
}//fim do for
return dy;
}//fim thresholdL
}
valeu galera pela ajuda