Se puder me ajudar preciso entregar esse trabalho na universidade até o final deste semestre e eu parei nessa parte e não to conseguindo concluir. Esse é todo o código: (em anexo estou enviando o tipo de imagem que quero analizar)
[code]
/*
- Programa para detectar possíveis fontes encontradas
- em uma imagem jpeg e listadas em um JList.
*/
package reconhecimentofontes;
import java.awt.;
import java.awt.color.ColorSpace;
import java.awt.event.;
import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;
import java.awt.image.WritableRaster;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.image.CropImageFilter;
import java.awt.Image;
import java.awt.image.FilteredImageSource;
//Classe para carregar a imagem
public class LeituraDeImagens extends JFrame{
private BufferedImage imagem, imagemCinza, imagemBuffer, imagemSeparada[];
private JButton botaoConverter, botaoAnalizar;
AreaImagem areaImagem;
JList listaDeFontes;
String pixel;
//configura o Menu
public LeituraDeImagens()
{
super ("Ferramenta de auxílio para identificação de Fontes");
Container c = getContentPane();
c.setLayout(new BorderLayout());
//configura o menu Arquivo e seus itens
JMenu menuArquivo = new JMenu ("Arquivo");
menuArquivo.setMnemonic( 'q' );
//configura o item Abrir do Menu Arquivo
JMenuItem abrir = new JMenuItem ("Abrir");
abrir.setMnemonic( 'A' );
abrir.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JFileChooser fc = new JFileChooser();
int res = fc.showOpenDialog(null);
if(res == JFileChooser.APPROVE_OPTION)
{
File arquivo = fc.getSelectedFile();
imagem = null;
try{ imagem = ImageIO.read(arquivo); }
catch(IOException exc)
{
JOptionPane.showMessageDialog(null, "Erro ao carregar a imagem: " +
exc.getMessage());
}
if(imagem != null)
{
areaImagem.imagemBuffer = imagem;
areaImagem.repaint();
}
}
}
}
);
menuArquivo.add(abrir);
//configura o item Sair do Menu Arquivo
JMenuItem sair = new JMenuItem("Sair");
sair.setMnemonic( 'r');
sair.addActionListener(new ActionListener()
{
public void actionPerformed (ActionEvent event)
{
System.exit(0);
}
} //fim da classe interna anônima
); //fim da chamada para addActionListener
menuArquivo.add(sair);
//cria barra de menus e a anexa à janela Menu
JMenuBar bar = new JMenuBar();
setJMenuBar(bar);
bar.add(menuArquivo);
botaoConverter = new JButton("Converter Escalar Cinza");
botaoConverter.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
converterEscalaCinza();
}
}
);
botaoAnalizar = new JButton("Analizar Imagem");
botaoAnalizar.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
DetectaPixel();
}
}
);
JPanel painel = new JPanel();
painel.setLayout(new FlowLayout());
painel.add(botaoConverter);
painel.add(botaoAnalizar);
c.add(painel, BorderLayout.NORTH);
// Cria a área de exibição da imagem
areaImagem = new AreaImagem();
c.add(areaImagem, BorderLayout.CENTER);
String fontes[ ] = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames( );
listaDeFontes = new JList(fontes);
c.add(new JScrollPane(listaDeFontes), BorderLayout.SOUTH);
setSize(900,800);
setVisible(true);
}
//executa o aplicativo
public static void main(String args[])
{
LeituraDeImagens application = new LeituraDeImagens();
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void converterEscalaCinza(){
ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY);
ColorConvertOp op = new ColorConvertOp(cs, null);
imagemCinza = op.filter(imagem, null);
areaImagem.imagemBuffer = imagemCinza;
areaImagem.repaint();
}
public void DetectaPixel(){
int altura = imagem.getHeight();
int largura = imagem.getWidth();
int red, green, blue, alpha, countImagem=0, cortaImagem = 0;
int posX=0, posY=0, posH=0, posW=0;
int pixels[] = new int[4];
WritableRaster raster = imagem.getRaster();
int transparencia = Transparency.OPAQUE;
for(int x = 0; x < largura; x++) {
for(int y = 0; y < altura; y++) {
raster.getPixel(x, y, pixels);
red = pixels[0];
green = pixels[1];
blue = pixels[2];
alpha = pixels[3];
transparencia = Transparency.BITMASK;
if (red < 200) {
posH++;
cortaImagem--;
}
if (red > 200){
cortaImagem++;
}
if (cortaImagem == altura){
if (x !=posX){
JOptionPane.showMessageDialog(null,"Terminou leitura do caracter="+posX+","+y+" "+posW+","+posH, "Processo Imagem", JOptionPane.PLAIN_MESSAGE);
imagemSeparada[countImagem] = imagemBuffer.getSubimage(posX, posY, posW, posH);
posX = x;
++posX;
countImagem++;
} else {++posX;}
}
}
cortaImagem = 0;
posW++;
}
JOptionPane.showMessageDialog(null,"Pronto", "Processo Imagem = " + countImagem, JOptionPane.PLAIN_MESSAGE);
}
}
// Sub-classe de JPanel para exibir a imagem
class AreaImagem extends JPanel{
public BufferedImage imagemBuffer;
public void paintComponent(Graphics g){
super.paintComponent(g);
// desenha a imagem no JPanel
g.drawImage(imagemBuffer, 0, 0, this);
}
}[/code]