W koncu sie ktos zlitowal dzieki:)
Ponizej daje cala klase ramki gdzie jest pulpit... zreszta sam zobaczysz
public class Ramka extends JFrame {
JMenuBar jMenuBar1 = new JMenuBar();
JMenu jMenuPlik = new JMenu();
JMenuItem jMenuPlikWyjscie = new JMenuItem();
JMenuItem jMenuObrazek = new JMenuItem();
JMenuItem wykrywanieKrawedzi8 = new JMenuItem();
JFileChooser wybieracz = new JFileChooser();
ObrazekPane oryginal;
ObrazekPane krawedzie;
JInternalFrame ramkaObrazekOryginal;
JInternalFrame ramkaWykryteKrawedzie;
JDesktopPane pulpit = new JDesktopPane();
BufferedImage image;
BufferedImage operacyjny;
String sciezka = "";
public Ramka() {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);
jbInit();
} catch (Exception exception) {
exception.printStackTrace();
}
}
private void jbInit() throws Exception {
this.getContentPane().add(pulpit);
setSize(new Dimension(800, 600));
setTitle("Projekt Specjalizacyjny");
jMenuPlik.setText("Plik");
jMenuObrazek.setText("Otwórz obrazek");
jMenuObrazek.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent actionEvent)
{
wybieracz.setApproveButtonText("Otworz");
int wybor = wybieracz.showOpenDialog(pulpit);
if(wybor == wybieracz.APPROVE_OPTION)
{
sciezka = wybieracz.getSelectedFile().getPath();
try
{
image = ImageIO.read(wybieracz.getSelectedFile());
oryginal = new ObrazekPane(image);
oryginal.setToolTipText("Oryginał");
ramkaObrazekOryginal = new JInternalFrame(sciezka,true,true,true,true);
ramkaObrazekOryginal.setSize(new Dimension(image.getWidth()+10,image.getHeight()+10));
ramkaObrazekOryginal.setLocation(0,0);
ramkaObrazekOryginal.getContentPane().add(new JScrollPane(oryginal), new BorderLayout().CENTER);
pulpit.add(ramkaObrazekOryginal);
ramkaObrazekOryginal.setVisible(true);
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(pulpit,"Rysunek jest nieprawidlowy","Ostrzezenie",JOptionPane.WARNING_MESSAGE);
}
}
else
{
JOptionPane.showMessageDialog(pulpit,"Nie wybrales zadnego rysunku","Ostrzezenie",JOptionPane.WARNING_MESSAGE);
}
}
});
wykrywanieKrawedzi8.setText("Wykryj krawędzie");
wykrywanieKrawedzi8.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event)
{
float[] elements =
{
-1.0f, -1.0f, -1.0f,
-1.0f, 8.f, -1.0f,
-1.0f, -1.0f, -1.0f
};
ObrazekPane pane = (ObrazekPane) pulpit.getSelectedFrame().getContentPane();
operacyjny = pane.getImage();
krawedzie = new ObrazekPane(operacyjny);
krawedzie.convolve(elements);
operacyjny = krawedzie.getImage();
krawedzie.setToolTipText("Wykryta krawędź");
ramkaWykryteKrawedzie = new JInternalFrame(sciezka,true,true,true,true);
ramkaWykryteKrawedzie.setSize(new Dimension(image.getWidth()+10,image.getHeight()+10));
ramkaWykryteKrawedzie.setLocation(0,0);
ramkaWykryteKrawedzie.getContentPane().add(new JScrollPane(oryginal), new BorderLayout().CENTER);
pulpit.add(ramkaWykryteKrawedzie);
ramkaObrazekOryginal.setVisible(true);
}
});
jMenuPlikWyjscie.setText("Wyjście");
jMenuPlikWyjscie.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent actionEvent)
{
System.exit(0);
}
});
jMenuBar1.add(jMenuPlik);
jMenuPlik.add(jMenuObrazek);
jMenuPlik.add(wykrywanieKrawedzi8);
jMenuPlik.add(jMenuPlikWyjscie);
setJMenuBar(jMenuBar1);
}
}
a tu jest ta klasa mojego panela. W tej klasie sa jakies bzdury do binaryzacji obrazu i odcienie szarosci na to nie musisz zwracac uwagi
package projektspec;
import java.awt.*;
import java.awt.image.*;
import javax.swing.JPanel;
class ObrazekPane extends JPanel
{
public ObrazekPane(BufferedImage img)
{
obr = img;
if(obr.getWidth() < 640)
{
szer = obr.getWidth();
}
else
{
szer = 640;
}
if(obr.getHeight() < 480)
{
wys = obr.getHeight();
}
else
{
wys = 480;
}
setPreferredSize(new Dimension(szer, wys));
}
//tu jest ta metoda getImage()
public BufferedImage getImage()
{
return obr;
}
public void setImage(BufferedImage i)
{
obr = i;
repaint();
}
public void paintComponent(Graphics g)
{
g.drawImage(obr,0,0,szer,wys,this);
}
public BufferedImage odcienieSzarosci(BufferedImage src)
{
WritableRaster raster = src.getRaster();
int[] pikselTab = new int[3*src.getWidth()*src.getHeight()];
int war1 = 0;
int war2 = 0;
int war3 = 0;
raster.getPixels(0,0,src.getWidth(),src.getHeight(),pikselTab);
for(int i =0;i<pikselTab.length;i=i+3)
{
war1= pikselTab[i];
if(i+1<pikselTab.length)
{
war2 = pikselTab[i + 1];
}
if(i+2<pikselTab.length)
{
war3= pikselTab[i+2];
}
if(i==0)
{
pikselTab[i] = (war1+war2+war3)/3;
}
else
{
pikselTab[i] = (war1+war2+war3)/3;
if(i+1<pikselTab.length)
{
pikselTab[i+1] = (war1+war2+war3)/3;
}
if(i+2<pikselTab.length)
{
pikselTab[i+2] = (war1+war2+war3)/3;
}
}
}
raster.setPixels(0,0,src.getWidth(),src.getHeight(),pikselTab);
return src;
}
public BufferedImage binaryzuj(BufferedImage img,int prog)
{
WritableRaster raster = img.getRaster();
int[] pikselTab = new int[3*img.getWidth()*img.getHeight()];
int war1 = 0;
raster.getPixels(0,0,img.getWidth(),img.getHeight(),pikselTab);
for(int i =0;i<pikselTab.length;i++)
{
war1= pikselTab[i];
if(war1 < prog)
{
pikselTab[i] = 0;
}
if(war1 > prog)
{
pikselTab[i] = 255;
}
}
raster.setPixels(0,0,img.getWidth(),img.getHeight(),pikselTab);
return img;
}
public BufferedImage filter(BufferedImageOp op)
{
BufferedImage filteredImage
= new BufferedImage(obr.getWidth(), obr.getHeight(), obr.getType());
op.filter(obr, filteredImage);
obr = filteredImage;
repaint();
return filteredImage;
}
public void convolve(float[] elements)
{
Kernel kernel = new Kernel(3, 3, elements);
ConvolveOp op = new ConvolveOp(kernel);
filter(op);
}
private BufferedImage obr;
public String sciezka;
private int wys;
private int szer;
}
Z gory dzieki