• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

matheusczr

Como passar variavel de um getRGB para o servidor?

1 mensagem neste tópico

Olá. Preciso fazer com que uma imagem seja dividida para que três servidores calculem uma nova posição para cada pixel dela.

Por enquanto estou trabalhando com cores, e assim já consegui fazer a divisão. O meu problema é que não consegui passar o conteúdo da variável pixels para o servidor. Alguem pode me ajudar??

O código abaixo deve rodar no lado cliente

import java.awt.*;
import java.io.*;
import java.net.*;
import java.awt.image.*;
import java.awt.event.*;
import javax.swing.*;
import javax.imageio.*;

public class teste extends JFrame{
  private BufferedImage imagem;  
  
  public teste() {
    super("Estudos Java");
    Container c = getContentPane();
    c.setLayout(new FlowLayout());	
    JButton btn = new JButton("Carregar Imagem");
    btn.addActionListener(
    	new ActionListener(){
        public void actionPerformed(ActionEvent e){
          imagem = null;          
          try{
          	double resultado;////////C///////////
            //Solicita um socket ao servidor. Deve existir um socket esperando no lado do servidor;
            Socket conexao = new Socket("LocalHost", 5000);//////////////C//////////

            //Cria os canais de comunicação com o servidor;
            DataInputStream in = new DataInputStream(conexao.getInputStream());/////////C///////////
            DataOutputStream out = new DataOutputStream(conexao.getOutputStream());//////////C//////////
            
///////////////////////////////////////////////////////////////////////////////////////////////////
            imagem = ImageIO.read(new File("tux.png"));
            int w = imagem.getWidth();///
		int h = imagem.getHeight();///
		int[] pixels = imagem.getRGB(0, 0, w, h, null, 0, w);///
/////////////////////////////////////
		int calc=h;
		for (int col = 0; col < w; col++) {
		  for (int lin = 0; lin < h; lin++) {
		  	if ((calc/3 >= lin) && (calc<=h)) { //Parte Superior
		  		pixels[w * lin + col] = new Color(255, 0, 0).getRGB();/// RED
//////////////
//			  		out.writeInt(pixels[w*lin+col]);
//////////////
		  	} 
		  	if (calc/3<lin && calc/3*2>=lin) {//Parte meio
		  		pixels[w * lin + col] = new Color(0, 255, 0).getRGB();/// GREEN
		  	}
		  	if (calc/3*2<lin && calc>=0) {//Parte inferior
		  		pixels[w * lin + col] = new Color(0, 0, 255).getRGB();/// BLUE
		  	}
		  }
		}
//////////////////////////////////////////////////////////////////////////

            //Recebe do servidor o resultado da operação solicita;
//            resultado = in.readDouble();
//            System.out.println("Respondeu");

///////////////////////////////////////////////////////////////////////////            
		imagem.setRGB(0, 0, w, h, pixels, 0, w);///
		ImageIO.write(imagem, "PNG", new File("tux2.png"));///
          }
          catch(IOException exc){
            JOptionPane.showMessageDialog(null, "Erro ao carregar a imagem: " + 
              exc.getMessage());
          }
          if(imagem != null) {
            JOptionPane.showMessageDialog(null, "Imagem carregada com sucesso.");
          }
        }
      }
    );

    c.add(btn);
    	
    setSize(400, 300);
    setVisible(true);
  }
  
  public static void main(String args[]){
    teste app = new teste();
    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}

O código abaixo deve rodar no servidor

import java.awt.*;
import java.io.*;
import java.net.*;
import java.awt.image.*;
import java.awt.event.*;
import javax.swing.*;
import javax.imageio.*;
import java.util.*;



public class CalcServer extends Thread{
    
    private static ServerSocket ss = null;
    private static Socket conexao = null;    
    
    public CalcServer(Socket _s) {
        this.conexao = _s;
    }
    
    public void run(){        
        
        int num1, num2;
        char oper;
        double resultado;
//		int[] pixels = imagem.getRGB(0, 0, w, h, null, 0, w);
	int[] pixels;// Ta dando erro com isso aqui
        try{         
            
            //Cria objetos que controlam o fluxo de comunicação;            
            DataInputStream in = new DataInputStream(conexao.getInputStream());
            DataOutputStream out = new DataOutputStream(conexao.getOutputStream());            
            
            //Recebe valores a serem calculados;
//			pixels = in.readInt();//Ta dando erro aqui
//			System.out.println("Respondido"); // se funcionar acima mostra essa msg aqui

            //Envia para o cliente o resultado da operação;
//            out.writeDouble(pixels);//aqui deverá ser dado um retorno ao usuario cliente

            
            //Encerra os canais de comunicação e o socket com o cliente;
            in.close();
            out.close();
            conexao.close();
            
        }catch(IOException e){
            System.out.println("IOException: " + e);            
        }
        
    }
    
    public static void main(String args[]){
        
        try{                        
            //Cria o ServerSockets;
            ss = new ServerSocket(5000);                                            
            while(true){                
                System.out.println("Esperando conexao do cliente...");
                //Cria o Socket e espera por conexões;
                Socket s = ss.accept();                                
                //Cria Thread para socket com um cliente. Passa o socket estabelecido para o método construtor;
                Thread t = new CalcServer(s);
                t.start();                
                //Volta ao loop para esperar mais concexões;
            }                       
            
        }catch(IOException e){
            System.out.println("IOException: " + e);
            System.exit(1);
        }
        
        
    }
    
    
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora