Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Matheusczr

Como passar variavel de um getRGB para o servidor?

Recommended Posts

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);
		}
	   
	   
	}
   
   
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não post tópicos duplicados, o seu tópico foi excluído

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.