package de.darkress.pixelfood; import javax.imageio.ImageIO; import javax.sound.sampled.Port; import java.awt.image.BufferedImage; import java.io.*; import java.net.*; import java.util.ArrayList; class Worker extends Thread { Socket socket; String[] pixelArray; public Worker(String HOSTNAME, int PORT, String[] pixelArray) { try { this.socket = new Socket(HOSTNAME, PORT); } catch (IOException e) { e.printStackTrace(); } this.pixelArray = pixelArray; } public void run() { while(true) { for(int i = 0; i < pixelArray.length; i++) { byte[] payload = pixelArray[i].getBytes(); try { socket.getOutputStream().write(payload); } catch (IOException e) { throw new RuntimeException(e); } } } } } class Main { private static BufferedImage processImage(String imageFile) { BufferedImage image; try { File file = new File(imageFile); image = ImageIO.read(file); return image; } catch (IOException e) { e.printStackTrace(); } return null; } private static String[] prepareArray(BufferedImage image, int xOffset, int yOffset) { int width = image.getWidth(); int height = image.getHeight(); ArrayList pixelArray = new ArrayList<>(); // Iterate over each pixel for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { // Get the RGBA value of the pixel int pixel = image.getRGB(x, y); // Extract individual color components int alpha = (pixel >> 24) & 0xFF; String rgbValue = String.format("%06X", (pixel & 0xFFFFFF)); String messageParameters = String.format("PX %s %s %s\n", x+xOffset, y+yOffset, rgbValue); if(alpha != 0) { pixelArray.add(messageParameters); } } } String[] payloadArray = new String[pixelArray.size()]; for(int i = 0; i < payloadArray.length; i++) { payloadArray[i] = pixelArray.get(i); } return payloadArray; } //Syntax blabla.jar x y Hostname Port Image.png public static void main(String[] args) { final int PORT = Integer.parseInt(args[3]);; final String HOSTNAME = args[2]; final int xOffset = Integer.parseInt(args[0]); final int yOffset = Integer.parseInt(args[1]); final String imageName = args[4]; // Read the PNG file BufferedImage image = processImage(imageName); String[] pixelArray = prepareArray(image, xOffset, yOffset); Worker worker0 = new Worker(HOSTNAME, PORT, pixelArray); /*Worker worker1 = new Worker(HOSTNAME, PORT, pixelArray); Worker worker2 = new Worker(HOSTNAME, PORT, pixelArray); Worker worker3 = new Worker(HOSTNAME, PORT, pixelArray); Worker worker4 = new Worker(HOSTNAME, PORT, pixelArray); Worker worker5 = new Worker(HOSTNAME, PORT, pixelArray); Worker worker6 = new Worker(HOSTNAME, PORT, pixelArray); Worker worker7 = new Worker(HOSTNAME, PORT, pixelArray);*/ worker0.start(); /*worker1.start(); worker2.start(); worker3.start(); worker4.start(); worker5.start(); worker6.start(); worker7.start();*/ /*try { Socket socket = new Socket(HOSTNAME, PORT); while(true) { for(int i = 0; i < pixelArray.length; i++) { byte[] payload = pixelArray[i].getBytes(); socket.getOutputStream().write(payload); } } } catch (IOException e) { e.printStackTrace(); }*/ } }