125 lines
3.9 KiB
Java
125 lines
3.9 KiB
Java
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<String> 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();
|
|
}*/
|
|
}
|
|
}
|