Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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 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);
}
}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);
}
}
}Carregando comentários...