style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Java Zone Espia Web

Java Zone Espia Web

Gracias a Google, podemos ver imagenes de camaras ip que funcionan sin contraseña, con este programa podremos ver 8 camaras ip al mismo tiempo casi en tiempo real, la diferencia es de 1 segundo.

Imagenes

Codigo

Clase Principal

package clases;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.util.ArrayList;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Principal extends JFrame {
 
 JPanel panelPrincipal;
 ArrayList<String> urls=new ArrayList<String>();
 
 public Principal(){
 
  urls.add("http://146.186.123.229/axis-cgi/jpg/image.cgi?resolution=352x240");
  urls.add("http://131.111.133.11/axis-cgi/jpg/image.cgi?resolution=480x360&dummy=1267804722739");
  urls.add("http://fotogermanoviseu.dyndns.info/axis-cgi/jpg/image.cgi?resolution=640x480&compression=10&color=1&clock=1&date=1");
  urls.add("http://198.82.159.134/axis-cgi/jpg/image.cgi?resolution=640x480&dummy=1152818432828");
  urls.add("http://98.238.252.97/axis-cgi/jpg/image.cgi?resolution=800x600&dummy=1280477002758");
  urls.add("http://80.24.195.19/axis-cgi/jpg/image.cgi?resolution=480x360");
  urls.add("http://216.8.159.21/axis-cgi/jpg/image.cgi?resolution=640x480");
  urls.add("http://hncam1.hn.psu.edu/axis-cgi/jpg/image.cgi?resolution=320x240");
 
  panelPrincipal=new JPanel();
  panelPrincipal.setLayout(new GridLayout(2,4,5,5));
  for(int i=0;i<8;i++){
   PanelCamara pc=new PanelCamara(urls.get(i));
   panelPrincipal.add(pc);
   Thread t=new Thread(pc);
   t.start();
  }
  add(panelPrincipal);
 }
 
 public static void main(String arg[]){
 
  Principal p=new Principal();
  p.setVisible(true);
  p.setBounds(0, 0, 500, 250);
  p.setLocationRelativeTo(null);
  p.setDefaultCloseOperation(EXIT_ON_CLOSE);
  p.setTitle("Java Zone Espia Web");
 
 }
}

Clase PanelCamara

package clases;

import java.awt.Graphics;
import java.awt.Image;
import java.net.MalformedURLException;
import java.net.URL;

import javax.swing.ImageIcon;
import javax.swing.JPanel;

public class PanelCamara extends JPanel implements Runnable{
 
 String url="";
 Image img;
 
 public PanelCamara(String url){
  this.url=url;
  try {
   img=new ImageIcon(new URL(url)).getImage();
  } catch (MalformedURLException e) {
   e.printStackTrace();
  }
 }
 
 public void paintComponent(Graphics g){
  super.paintComponents(g);
  g.drawImage(img, 0, 0, 150, 100, this);
 }

 @Override
 public void run() {
  while(true){
   try {
    img.flush();
    img=new ImageIcon(new URL(url)).getImage();
    repaint();
    Thread.sleep(1000);
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
 }
}

Descargar

El proyecto lo pueden descargar desde aqui.

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Muy interesante. Un

Muy interesante y sorprendentemente sencillo. Kudos!!!

Estuve intentando como hacer que al cambiar el tamaño de la ventana se siguiera viendo la imagen pero no conseguí algo que me satisfaga.

Solo encontré un par de cambios pequeñitos que mejoran el programa, aquí esta el diff

15,19d14
<   try {
<    img=new ImageIcon(new URL(url)).getImage();
<   } catch (MalformedURLException e) {
<    e.printStackTrace();
<   }
24c19
<   g.drawImage(img, 0, 0, 150, 100, this);
---
>   g.drawImage(img, 0, 0, getWidth(), getHeight(), this);
30d24
<     img.flush();
32a27,28
>     img.flush();
>
43c39
< }
---
> }

1. Que es, no inicializar la imagen en el constructor para que la ventana no tarde tando en mostrarse
2. En el método paintComponent, dibujar a todo el espacio disponible del componente, así si se hace un resize se puede ver más imagen

ejemplo

Gracias!

Gracias oscar por tu aporte, lo modificare para la segunda entrega, en la que ya estoy trabajando, recibo cualquier idea, por si alguien tiene una.

Ahh pues la parte "obvia" es

Ahh pues la parte "obvia" es agregarle un tooltip para ver el título y la segunda no tan obvia pero agradable sería darle click a la imagen y que esta abarque ahora toda la pantalla

:D

Estuve intentando sin éxito evitar que se refresque la imagen cuando se cambia el tamaño de la imagen ( es algo como poner en pause el hilo que ejecuta la actualización para evitar que se ponga en blanco cuando se está arrastrando ) pero no me quedo.

No sé si ya te lo habíamos dicho pero también sería buena idea que hicieras una cuenta en github para colgar tu código ahí.

:)
Saludos.

Imagen de Sr. Negativo

Super aporte

como siempre :D !!!

Algo de ayuda

Bueno les informo que ya estoy desarrollando la version 2 de este proyecto, se lograron varias cosas como, hacer que ocupe el espacio del frame, gracias a oscar, asi como hacer que se carguen mas rapido, ademas al darle un clic a una de las camaras, se pone en tamaño completo y al darle otro regresan las otras camaras, ahora me enfrento a un pequeño problema y es el de repintado.

Al tratar de dibujar las imagenes se da un parpadeo ya que mientras el programa trata de descargar la imagen para mostrarla se queda el panel en blanco hasta que la descarga completamente y la muestra en el panel, pero el salto es bastante notorio, si tienen recomendaciones serian muy utilies en este momento.

Yo estuve tratando de

Yo estuve tratando de solucionar ese mismo problema pintando la imagen en otra imagen.

El problema parece ser que una imgen creada desde un url se queda "conectada"

Entonces lo que intenté ( sin éxito )
fue hacer algo como este pseudo:

offLineImage = BufferedImage.create(  imagen.width,  imagen.size, Imagen.INT_RGB_NOSEQUE )
graphics = offLineImage.createGraphics()
graphics.drawImage( imagen,  width, height );
imagenToPaint = offLineImage

Algo así. La idea es tenerla en otro thread de forma que la imagen siempre se vea bien hasta que este lista se reemplaza por este.

Me parece que el tema estaba que estos ya estaban siendo dibujados en un thread separado. Sería cosa de volver a revisarlo.

Tambien intente eso

Oscar también probé ese mismo método, y varios de hecho, pero no pude hacer desaparecer el parpadeo, seguiré intentando. Al redimensionar la ventana, se ve el parpadeo de las imagenes.

Verás que si no llamas al

Verás que si no llamas al método flush deja de parpadear y se ve una transición correcta, pero claro ya no se actualiza la imagen.

si, ya me habia pasado

Por error, me di cuenta de eso, pero como dices no se refresca la imagen y nunca cambia, y obvio no es la idea, seguire buscando otra opcion, les aviso si la encuentro y si encuentras la forma, hazmela saber oscar, gracias de antemano

Publicada la segunda entrega

Listo!!, ya publique la segunda parte de este proyecto, algunas mejoras pero todavia podemos hacerla mejor, ayuden y comenten que mas le hariamos?

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">