Hi,
I'm sorry, I don't speak english very well :-S (but if you want to speak french, I'll say: good idea !
)
I'll even try to introduce my problem to you:
I've this message : Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
after compilation of the following lines:
(In fact, it works with little pics, but not bigs (10MB), and I need it works with big pics)
Is there somebody who can explain or resolve this problem?
thank you very much !!
import javax.swing.*;
import javax.swing.event.*;
import java.awt.image.*;
import javax.imageio.*;
import java.io.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class zoomImage extends JFrame implements ActionListener {
private JLabel photoPreview;
//private JLabel photoPreview3;
private JSlider curseur = new JSlider(JSlider.VERTICAL, 1, 3, 1);
private BufferedImage image;
int width;
int height;
public zoomImage() {
super("");
build();
}
public void build() {
setTitle("debut du projet");
setSize(1200, 900);
setResizable(true);
setContentPane(buildContentPane());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private JPanel buildContentPane() {
JPanel panel = new JPanel();
panel.setLayout(null);
photoPreview = new JLabel();
photoPreview.setBounds(100, 200, 200, 200);
panel.add(photoPreview);
//photoPreview3 = new JLabel();
JMenuBar menuBar = new JMenuBar();
JMenu menu1 = new JMenu("Fichier");
JMenuItem zoomer = new JMenuItem("zoomer");
menu1.add(zoomer);
Ecouteur3 ec3 = new Ecouteur3();
zoomer.addActionListener(ec3);
JMenuItem ouvrir = new JMenuItem("Ouvrir");
menu1.add(ouvrir);
Ecouteur1 ec1 = new Ecouteur1();
ouvrir.addActionListener(ec1);
menuBar.add(menu1);
setJMenuBar(menuBar);
return panel;
}
class Ecouteur3 implements ActionListener {
public void actionPerformed(ActionEvent e) {
try {
Map map = new Map(image);
map.setVisible(true);
map.pack();
map.setTitle("Test");
}
catch (Exception ee) {
ee.printStackTrace();
}
}
}
class Ecouteur1 implements ActionListener {
public void actionPerformed(ActionEvent e) {
JFileChooser fc = new JFileChooser();
int returnVal = fc.showOpenDialog(zoomImage.this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
try {
File f = fc.getSelectedFile();
image = ImageIO.read(f);
ImageIcon icz = new ImageIcon(creerMiniature(image));
photoPreview.setIcon(icz);
}
catch (IOException ee) {
ee.printStackTrace();
}
}
}
}
private static BufferedImage creerMiniature(BufferedImage image) {
int width = 200, height = 200;
BufferedImage result = new BufferedImage(width, height, image.getType());
Graphics2D g2d = result.createGraphics();
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
g2d.drawImage(image, 0, 0, width, height, null);
g2d.dispose();
return result;
}
public class Map extends JFrame {
private MapPane mapPane;
private JSlider curseur = new JSlider(JSlider.VERTICAL, 1, 3, 1);
public Map(BufferedImage image) throws Exception {
//image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
//image = ImageIO.read(new File("1.jpg"));
//image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
mapPane = new MapPane(image);
curseur.setMajorTickSpacing(1);
curseur.setMinorTickSpacing(1);
curseur.setPaintLabels(true);
curseur.setPaintTicks(true);
curseur.setSnapToTicks(true);
curseur.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
JSlider curseur = (JSlider) e.getSource();
int scale = curseur.getValue();
mapPane.setScale(scale);
repaint();
}
});
setLayout(new BorderLayout());
add(new JScrollPane(mapPane), BorderLayout.CENTER);
add(curseur, BorderLayout.EAST);
}
private class MapPane extends JPanel {
private BufferedImage image;
private int scale = 1;
public MapPane(BufferedImage image) {
super();
setImage(image);
}
private void recalculateAndResetSize() {
int width = 1;
int height = 1;
Insets insets = getInsets();
width += insets.left + insets.right;
height += insets.top + insets.bottom;
if (image != null) {
width += image.getWidth() * scale;
height += image.getHeight() * scale;
}
Dimension size = new Dimension(width, height);
setSize(size);
setMinimumSize(size);
setPreferredSize(size);
}
public void setImage(BufferedImage image) {
this.image = image;
recalculateAndResetSize();
repaint();
}
public BufferedImage getImage() {
return image;
}
public void setScale(int value) {
this.scale = value;
recalculateAndResetSize();
repaint();
}
public int getScale() {
return scale;
}
@Override public void setBorder(Border border) {
super.setBorder(border);
recalculateAndResetSize();
}
@Override protected void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
Graphics2D g2d = (Graphics2D) graphics;
if (image != null) {
Insets insets = getInsets();
Dimension size = getSize();
int panelWidth = size.width - (insets.left + insets.right);
int panelHeight = size.height - (insets.top + insets.bottom);
int scaledImageWidth = image.getWidth() * scale;
int scaledImageHeight = image.getHeight() * scale;
int x = (panelWidth - scaledImageWidth) / 2;
int y = (panelHeight - scaledImageHeight) / 2;
g2d.translate(insets.left, insets.top);
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
g2d.drawImage(image, x, y, scaledImageWidth, scaledImageHeight, null);
g2d.translate( -insets.left, -insets.top);
}
}
}
}
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
}
public static void main(
String[] args) {
zoomImage fenetre = new zoomImage();
fenetre.setVisible(true);
}
}