package com.faforever.client.util;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.image.Image;
import javafx.scene.image.WritableImage;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public final class IdenticonUtil {
private static final int PIXEL_COUNT = 8;
private static final int IMAGE_SIZE = 128;
private IdenticonUtil() {
throw new AssertionError("Not instantiatable");
}
public static Image createIdenticon(Object object) {
try {
byte[] hash = MessageDigest.getInstance("MD5").digest(object.toString().getBytes());
BufferedImage bufferedImage = new BufferedImage(IMAGE_SIZE, IMAGE_SIZE, BufferedImage.TYPE_4BYTE_ABGR);
int pixelSize = IMAGE_SIZE / PIXEL_COUNT;
Graphics graphics = bufferedImage.getGraphics();
graphics.setColor(new Color(hash[0] & 255, hash[1] & 255, hash[2] & 255));
int mirrorPixel = (int) Math.ceil(PIXEL_COUNT / 2f);
for (int x = 0; x < PIXEL_COUNT; x++) {
int pixelDeterminingIndex = x < mirrorPixel ? x : PIXEL_COUNT - 1 - x;
for (int y = 0; y < PIXEL_COUNT; y++) {
if ((hash[pixelDeterminingIndex] >> y & 1) == 1) {
graphics.fillRect(x * pixelSize, y * pixelSize, pixelSize, pixelSize);
}
}
}
return SwingFXUtils.toFXImage(bufferedImage, new WritableImage(bufferedImage.getWidth(), bufferedImage.getHeight()));
} catch (NoSuchAlgorithmException ex) {
throw new RuntimeException(ex);
}
}
}