Seguidores

MIS WEBS



sábado, 6 de enero de 2018

HACER UN MOSAICO DENTRO DE UNA LAMINA DE UN MARCO EN JAVA



En ocasiones desearíamos realizar un mosaico con una foto dentro de una lámina de un frame, en el siguiente ejercicio, utilizaremos los métodos getHeight (obten Altura)  y  getWidth (obten Ancho) para preguntar a nuestro ordenador el tamaño de la foto seleccionada, los guardaremos en dos variables que mas  tarde poder utilizarlas en otro método copyArea() al que le pasaremos por parámetros las variables que hemos obtenido con el alto y el ancho de nuestra foto.

Utilizaremos un for anidado para ir copiando hasta que no quepan mas fotos en nuestro marco.

Recordaremos los parámetros del copyAea():





Cuando posicionemos la primera vez nuestra foto con drawImage() le diremos que X=0 e Y =0, para que la coloque en el borde superior de nuestro panel.


Y con el for anidado la iremos clonando por toda la lamina


for (int i=0;i<pondremos el alto de nuestra lamina;i++) {
for (int j=0;j<pondremos el ancho de nuestra lamina;;j++) {
g.copyArea(0, 0, AnchoFoto, AltoFoto, AnchoFoto*i, AltoFoto*j);
}
}
}




Veamos al completo:

import java.awt.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;

public class practica5_frame {

public static void main(String[] args) {
Marco6 marco = new Marco6();
marco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
marco.setVisible(true);
}
}

class Marco6  extends JFrame{
public Marco6() {
setTitle ("marco con dibujos");
setBounds(400,200,700,400); 
Lamina6 lamina = new Lamina6();
add(lamina);
}
}

class Lamina6 extends JPanel{
public void paintComponent(Graphics g) {
super.paintComponent(g);
setBackground(Color.GRAY);
File ruta = new File("images2.jpg");
try { //tratamineto de excepciones, haz esto y si no catch
foto = ImageIO.read(ruta); 
catch(IOException e) { 
JOptionPane.showConfirmDialog(null, "no esta la foto");
}
/*creamos dos var y le solicitamos al ordenador que nos diga getheight obten alto Foto y ancho, el parametro this indica que deseamos obtener el de nuestra foto actual*/
int AltoFoto =foto.getHeight(this);
int AnchoFoto= foto.getWidth(this);
//escribimos la foto en nuestra lamina
g.drawImage(foto, 0, 0, null); 
//bucle for anidado en el que vamos pegando la foto tatas veces como sea necesario has completar nuestro panel
for (int i=0;i<400;i++) {
for (int j=0;j<700;j++) {
g.copyArea(0, 0, AnchoFoto, AltoFoto, AnchoFoto*i, AltoFoto*j);
}
}
}
private Image foto;
}

No hay comentarios:

Publicar un comentario

Buscar este blog

Sandisk y Western Digital