Java - Ayuda con copia de imagen java

 
Vista:
sin imagen de perfil

Ayuda con copia de imagen java

Publicado por Erick (3 intervenciones) el 17/07/2015 19:03:56
Bueno ante todo gracias a los que puedan ayudarme, mi problema es el siguiente:
Tengo una clase que extiende de Jpanel donde luego cargo una imagen, si es mas grande que el tamaño de mi jpanel(441x550) la redimensiono, hasta ahí todo bien, el problema es cuando hago una copia pixel por pixel, se supone que deberia copiarse exactamente igual, sin embargo la imagen en tamaño original(no se redimensiona) se corta a ese tamaño. El codigo es el siguiente:

En esta parte redimensiono


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void setImagen(String nombreImagen) {
        if (nombreImagen != null) {
          try {
             bmp = ImageIO.read(new File(nombreImagen));
             escalax= (float)(bmp.getWidth())/441;
             escalay= (float)(bmp.getHeight())/550;
             if(bmp.getHeight() > 550 || bmp.getWidth() > 441){
                  super.setSize((int)(bmp.getWidth()/escalax),(int)(bmp.getHeight()/escalay));
             }
             else
                 super.setSize(bmp.getWidth(),bmp.getHeight());
          }
          catch (IOException ex) {
             System.out.println("No se pudo leer la imagen");
          }
       }
       else {
          bmp = null;
       }
    }

Este el codigo de copia



1
2
3
4
5
6
7
8
9
10
float  w=panelImage1.getWidth();
        float  h=panelImage1.getHeight();
            panelImage2.setSize((panelImage1.getWidth()),(panelImage1.getHeight()));
            for (int i = 0; i < panelImage1.getWidth(); i++) {
                for (int j = 0; j <panelImage1.getHeight(); j++) {
                    int c=panelImage1.getPixel(i, j);
                    panelImage2.setPixel(i, j, c);
                }
            }
            panelImage2.repaint();

Adjunto tambien el proyecto, espero pueda ayudarme, Gracias
tdia
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda con copia de imagen java

Publicado por Copy (1 intervención) el 20/07/2015 22:09:35
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
 
public class ImageResizer {
    //Ancho máximo
    public static int MAX_WIDTH=800;
    //Alto máximo
    public static int MAX_HEIGHT=800;
 
    /*Este método es el de la magia recibe la ruta al archivo original y la ruta donde vamos a guardar la copia
    copyImage("C:\\Users\\copy\\Desktop\\arbol.png","C:\\Users\\copy\\Desktop\\Copia\\arbol.png");*/
 
    public static void copyImage(String filePath, String copyPath) {
        BufferedImage bimage = loadImage(filePath);
        if(bimage.getHeight()>bimage.getWidth()){
            int heigt = (bimage.getHeight() * MAX_WIDTH) / bimage.getWidth();
            bimage = resize(bimage, MAX_WIDTH, heigt);
            int width = (bimage.getWidth() * MAX_HEIGHT) / bimage.getHeight();
            bimage = resize(bimage, width, MAX_HEIGHT);
        }else{
            int width = (bimage.getWidth() * MAX_HEIGHT) / bimage.getHeight();
            bimage = resize(bimage, width, MAX_HEIGHT);
            int heigt = (bimage.getHeight() * MAX_WIDTH) / bimage.getWidth();
            bimage = resize(bimage, MAX_WIDTH, heigt);
        }
        saveImage(bimage, copyPath);
    }
 
    /*
    Este método se utiliza para cargar la imagen de disco
    */
    public static BufferedImage loadImage(String pathName) {
        BufferedImage bimage = null;
        try {
            bimage = ImageIO.read(new File(pathName));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return bimage;
    }
 
    /*
    Este método se utiliza para almacenar la imagen en disco
    */
    public static void saveImage(BufferedImage bufferedImage, String pathName) {
        try {
            String format = (pathName.endsWith(".png")) ? "png" : "jpg";
            File file =new File(pathName);
            file.getParentFile().mkdirs();
            ImageIO.write(bufferedImage, format, file);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    /*
    Este método se utiliza para redimensionar la imagen
    */
    public static BufferedImage resize(BufferedImage bufferedImage, int newW, int newH) {
        int w = bufferedImage.getWidth();
        int h = bufferedImage.getHeight();
        BufferedImage bufim = new BufferedImage(newW, newH, bufferedImage.getType());
        Graphics2D g = bufim.createGraphics();
        g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
        g.drawImage(bufferedImage, 0, 0, newW, newH, 0, 0, w, h, null);
        g.dispose();
        return bufim;
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Ayuda con copia de imagen java

Publicado por Erick (3 intervenciones) el 21/07/2015 06:39:31
Pues gracias por la respuesta voy a probar esta solución en cuanto pueda y te digo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con copia de imagen java

Publicado por Erick (3 intervenciones) el 26/07/2015 02:44:56
Pues ahora pude revisar bien en cierta forma si hace lo que necesito pero no como lo necesitaba, lo que yo queria era unna copia pixel por pixel( era un trabajo) pero gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar