Witam wszystkich bardzo serdecznie
mam taki kod
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
import javax.imageio.*;
import java.io.*;
public class GrafikaZad2 extends JFrame implements MouseListener, ActionListener {
private static final long serialVersionUID = 1L;
public JTextField poleTekstoweSciezka = new JTextField(30);
public JTextField poleTekstoweWymiarX = new JTextField(10);
public JTextField poleTekstoweWymiarY = new JTextField(10);
PanelWyjsciowy panelWyjsciowy = new PanelWyjsciowy();
PanelWejsciowy panelWejsciowy = new PanelWejsciowy();
JButton wczytywanieplikuObrazka = new JButton("Wczytaj");
JButton skalowanieplikuObrazka = new JButton("Skaluj");
JButton zapisz = new JButton("Zapisz");
public JPanel panelCalosciowy = new JPanel();
//public Graphics2D graphics = (Graphics2D) getGraphics();
private int poczatkowaWysokosc;
private int poczatkowaSzerokosc;
BufferedImage plikObrazu;
BufferedImage plikObrazu2;
File obrazWPliku;
public GrafikaZad2() {
// Full screen
setExtendedState(Frame.MAXIMIZED_BOTH);
setDefaultCloseOperation(EXIT_ON_CLOSE);
getContentPane().add(panelCalosciowy);
poleTekstoweSciezka.setText("C:\\1.jpg");
/**
* AKCJE KOMPONENTOW
*/
wczytywanieplikuObrazka.addActionListener(new SluchaczKomponentu());
skalowanieplikuObrazka.addActionListener(new SluchaczKomponentu());
zapisz.addActionListener(new SluchaczKomponentu());
/**
* ROZMIESZCZENIE PANELI W OKIENKU
*/
//Panel - calosc, suma paneli mniejszych
panelCalosciowy.setLayout(new BorderLayout());
//panelWejsciowy.setBorder(BorderFactory.createLineBorder(Color.RED, 3));
panelWejsciowy.setToolTipText("Obraz wejsciowy");
panelWejsciowy.setLayout(new BorderLayout());
panelWejsciowy.setBounds(70, 50, 602, 525);
//panelWyjsciowy.setBorder(BorderFactory.createLineBorder(Color.BLACK, 3));
panelWyjsciowy.setToolTipText("Obraz wyjsciowy");
panelWyjsciowy.setLayout(new BorderLayout());
panelWyjsciowy.setBounds(10, 50, 602, 525);
JPanel pierwszyPanel = new JPanel();
pierwszyPanel.setLayout(null);
pierwszyPanel.add(panelWejsciowy);
JPanel drugiPanel = new JPanel();
drugiPanel.setLayout(null);
drugiPanel.add(panelWyjsciowy);
JPanel panelLaczacyObraz = new JPanel();
panelLaczacyObraz.setLayout(new GridLayout(1, 0));
panelLaczacyObraz.add(pierwszyPanel);
panelLaczacyObraz.add(drugiPanel);
//TRZECI PANEL - KONTROLNY
JPanel trzeciPanel = new JPanel();
trzeciPanel.setLayout(new FlowLayout());
trzeciPanel.add(poleTekstoweSciezka);
trzeciPanel.add(wczytywanieplikuObrazka);
JPanel czwartyPanel = new JPanel();
czwartyPanel.setLayout(new FlowLayout());
czwartyPanel.add(skalowanieplikuObrazka);
czwartyPanel.add(poleTekstoweWymiarX);
czwartyPanel.add(poleTekstoweWymiarY);
czwartyPanel.add(zapisz);
JPanel panelLaczacyKontrolki = new JPanel();
panelLaczacyKontrolki.setLayout(new FlowLayout());
panelLaczacyKontrolki.add(trzeciPanel);
panelLaczacyKontrolki.add(czwartyPanel);
//Zebranie w 1 calosc :
panelCalosciowy.add(panelLaczacyObraz, BorderLayout.CENTER);
panelCalosciowy.add(panelLaczacyKontrolki, BorderLayout.SOUTH);
addMouseListener(this);
setVisible(true);
} // koniec konstruktora
/**
* OBSLUGA PRZYCISKOW
*/
class SluchaczKomponentu implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (((JButton) e.getSource()).getText().equals("Wczytaj")) {
if (!panelWejsciowy.isVisible()) {
panelWejsciowy.setVisible(true);
panelWejsciowy.otworzObrazek(poleTekstoweSciezka.getText());
} else {
panelWejsciowy.otworzObrazek(poleTekstoweSciezka.getText());
}
}
if (((JButton) e.getSource()).getText().equals("Skaluj")) {
plikObrazu2 = new BufferedImage(Integer.parseInt(poleTekstoweWymiarX.getText()), Integer.parseInt(poleTekstoweWymiarY.getText()),
plikObrazu.getType());
panelWyjsciowy.scale(Integer.parseInt(poleTekstoweWymiarX.getText()),Integer.parseInt(poleTekstoweWymiarY.getText()),panelWyjsciowy.getGraphics());
}
if (((JButton) e.getSource()).getText().equals("Zapisz"))
panelWyjsciowy.zapiszObrazek(poleTekstoweSciezka.getText());
} // action performed
} // Koniec sluchacz komponentu
@Override
public void mouseReleased(MouseEvent arg0) {
}
@Override
public void mouseClicked(MouseEvent arg0) {
}
@Override
public void mouseEntered(MouseEvent arg0) {
}
@Override
public void actionPerformed(ActionEvent arg0) {
}
@Override
public void mouseExited(MouseEvent arg0) {
}
@Override
public void mousePressed(MouseEvent arg0) {
}
class PanelWejsciowy extends JPanel implements MouseListener {
private static final long serialVersionUID = 1L;
Graphics2D graphics2d;
Graphics2D graphics = null;
//File obrazWPliku;
public PanelWejsciowy() {
super();
addMouseListener(this);
repaint();
}
public void otworzObrazek(String sciezkaPliku) {
obrazWPliku = new File(sciezkaPliku);
try {
plikObrazu = ImageIO.read(obrazWPliku);
} catch (IOException ex) {
JOptionPane.showMessageDialog(this, "Nie mozna otworzyc pliku", "Blad!", JOptionPane.ERROR_MESSAGE);
}
graphics = plikObrazu.createGraphics();
// Wymiary domyslne :
poczatkowaWysokosc = plikObrazu.getHeight();
poczatkowaSzerokosc = plikObrazu.getWidth();
poleTekstoweWymiarX.setText(Integer.toString(poczatkowaSzerokosc));
poleTekstoweWymiarY.setText(Integer.toString(poczatkowaWysokosc));
repaint();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
graphics2d = (Graphics2D) g;
graphics2d.drawImage(plikObrazu, null, 0, 0);
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
}
class PanelWyjsciowy extends JPanel implements MouseListener {
private static final long serialVersionUID = 1L;
public PanelWyjsciowy() {
addMouseListener(this);
repaint();
}
public void scale(int k1, int k2, Graphics G) {
Graphics2D graphics2d = (Graphics2D) G;
graphics2d.drawImage(new BufferedImage(Integer.parseInt(poleTekstoweWymiarX.getText()), Integer.parseInt(poleTekstoweWymiarY.getText()), plikObrazu.getType()),
null, 0, 0);
int[][] colorsOriginal = returnImageColor(plikObrazu);
int[][] interpolated = interpolate(colorsOriginal, k1, k2);
plikObrazu2 = createImage(interpolated);
graphics2d.drawImage(plikObrazu2, null, 0, 0);
}
// zamiast dzialac na obrazie dzialasz na tablicy intow zawierajacych kolory
public int[][] returnImageColor(BufferedImage plikObrazu) {
int[][] out = new int[plikObrazu.getWidth()][plikObrazu.getHeight()];
for(int i = 0; i < out.length; i++) {
for(int j = 0; j < out[0].length; j++) {
int f = plikObrazu.getRGB(i,j);
//out[i][j] = in.getRGB(i, j);
out[i][j] = f;
}
}
return out;
}
// tablica wartosci rgb o wielkosci obrazu wejsciowego, k1 k2 wspolczynniki powiekszenia/pomniejszenia
public int[][] interpolate(int[][] in, int k1, int k2) {
int[][] out = new int[(k1 * in.length)][(k2 * in[0].length)];
double ratiox, ratioy;
ratiox = (double)(in.length-1)/(out.length-1);
ratioy = (double)(in[0].length-1)/(out[0].length-1);
System.out.println("KaEla: " + ratiox + "x" + ratioy);
// punkty pomiedzy
double x, y;
// alfa beta
double a, b;
// punkty z ktorych bedziemy brac
int x0, x1, y0, y1,rgb2;
//int A, B, C, D;
Color A,B,C,D,rgb;
double r3,g3,b3,r1,g1,b1,r2,g2,b2;
for(int i = 0; i < out[0].length; i++) {
for(int j = 0; j < out.length; j++) {
x = j * ratiox;
y = i * ratioy;
x0 = (int)Math.floor(x);
y0 = (int)Math.floor(y);
x1 = x0 + 1;
y1 = y0 + 1;
a = x - x0;
b = y - y0 ;
// warunki graniczne
if(x1 >= in.length)
x1 = in.length - 1;
if(y1 >= in[0].length)
y1 = in[0].length - 1;
A = new Color(in[x0][y0]);
B = new Color(in[x1][y0]);
C = new Color(in[x0][y1]);
D = new Color(in[x1][y1]);
r1 = (1-a)*A.getRed() + a*B.getRed();
r2 = (1-a)*C.getRed() + a*D.getRed();
r3 = (1-b)*r1 + b*r2;
g1 = (1-a)*A.getGreen() + a*B.getGreen();
g2 = (1-a)*C.getGreen() + a*D.getGreen();
g3 = (1-b)*g1 + b*g2;
b1 = (1-a)*A.getBlue() + a*B.getBlue();
b2 = (1-a)*C.getBlue() + a*D.getBlue();
b3 = (1-b)*b1 + b*b2;
rgb = new Color((int)r3,(int)g3,(int)b3);
rgb2 = rgb.getRGB();
out[j][i] = rgb2;
}
}
return out;
}
public BufferedImage createImage(int[][] in) {
BufferedImage out = new BufferedImage(in.length, in[0].length, BufferedImage.TYPE_INT_RGB);
for(int i = 0; i < in.length; i++) {
for(int j = 0; j < in[0].length; j++) {
out.setRGB(i, j, in[i][j]);
}
}
return out;
}
public void zapiszObrazek(String sciezkaPliku)
{
obrazWPliku = new File(sciezkaPliku);
boolean poprawnie=false;
try {
ImageIO.write(plikObrazu2, "bmp", obrazWPliku);
poprawnie=true;
}
catch (IOException ex)
{
JOptionPane.showMessageDialog(null, "Nie mozna zapisac pliku", "Blad!", JOptionPane.ERROR_MESSAGE);
}
if (poprawnie)
JOptionPane.showMessageDialog(null, "Zapisano!");
}
public void paintComponent(Graphics G) {
super.paintComponent(G);
}
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}
public static void main(String[] args) {
new GrafikaZad2();
}
}
Ciągle wyskakuja mi błedy Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
jednak nie moge sobie z tym poradzic od 5 dni ...
bardzo proszę o pomoc i z góry dziekuje