package io.github.jgkamat.ViPaint.VimBar;
import io.github.jgkamat.ViPaint.Handlers.SettingManager;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
import java.awt.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Set;
/**
* A static class to convert a 'raw' image to a javafx canvas.
* From there you can save it as a png.
*
* @author Jay Kamat
* @version 0.1
*/
public class RawConverter {
public static double getWidth(File inFile) throws IOException {
return Math.ceil(Math.sqrt((int) inFile.length() / 3));
}
public static double writeToCanvas(Canvas canvas, File inFile) throws IOException {
byte[] array = new byte[(int) inFile.length()];
FileInputStream stream = new FileInputStream(inFile);
int numbytes = stream.read(array);
return writeToCanvas(canvas, array);
}
public static double writeToCanvas(Canvas canvas, String text) {
try {
return writeToCanvas(canvas, text.getBytes("US-ASCII"));
} catch (UnsupportedEncodingException e) {
// aaaaaaaaaaah!
e.printStackTrace();
System.out.println("Using no encoding?");
return writeToCanvas(canvas, text.getBytes());
}
}
public static double writeToCanvas(Canvas canvas, byte[] text) {
// System.out.println(Arrays.toString(text));
GraphicsContext g = canvas.getGraphicsContext2D();
Paint oldPaint = g.getFill();
g.clearRect(0, 0, Short.MAX_VALUE, Short.MAX_VALUE);
Point upperRight = new Point(0, 0);
int red = -11;
int blue = -11;
int green = -11;
double width = Math.ceil(Math.sqrt(text.length / 3)) - 1;
if (width <= 0) {
throw new IllegalArgumentException("Length could not be calculated properly!");
}
int curWidth = 0;
for (byte toAdd: text) {
if (red == -11) {
red = (int) toAdd;
} else if (green == -11) {
green = (int) toAdd;
} else {
blue = (int) toAdd;
// System.out.format("red:%4d green:%4d blue:%4d\n", red, green, blue);
g.setFill(new Color(red / 256.0, green / 256.0, blue / 256.0, 1));
g.fillRect(upperRight.getX(), upperRight.getY(),
(int) SettingManager.get("rawthickness"), (int) SettingManager.get("rawthickness"));
if (curWidth >= width) {
upperRight.setLocation(0, upperRight.getY() + (int) SettingManager.get("rawthickness"));
curWidth = 0;
} else {
upperRight.setLocation(upperRight.getX() +
(int) SettingManager.get("rawthickness"), upperRight.getY());
curWidth++;
}
red = -11;
blue = -11;
green = -11;
}
}
g.setFill(oldPaint);
return width;
}
}