如何生成随机模式并将其转换为图像?



我目前正在制作游戏。我有多个用户,每个用户都有一个 id (UUID(。我希望使用这个 id 就像一个键来生成一个随机模式,然后为该玩家生成一个图像。

boolean[] booleanPlayerID = BSUtility.bytesToBooleans(playerID.getBytes(UTF_8));
WritableImage image = new WritableImage(50, 50);
PixelWriter writer = image.getPixelWriter();
int booleanIndex = 0;
for(int y = 0; 50 > y; y++){
for(int x = 0; 50 > x; x++){
if(booleanIndex >= booleanPlayerID.length){
booleanIndex = 0;
}
if(booleanPlayerID[booleanIndex]){
writer.setColor(x, y, Color.BLACK);
}
booleanIndex++;
}
}

假设图像将是 50x50...我一直在做的是获取播放器的 id,转换为布尔数组,循环浏览图像像素,也循环浏览布尔数组,如果布尔值为 true,则将像素颜色设置为黑色。if 语句是为了避免索引越界(我知道我可能应该将布尔数组转换为与图像中像素数相同的长度(......

这确实产生了一些模式,但说实话,这是一个非常糟糕的模式。这些模式通常彼此非常相似。我想知道是否有人可以提供如何做得更好的提示/示例。用我的小研究,我真的找不到太多。然而,我确实找到了我希望在某种程度上获得的模式,我相信它们被称为缠结模式。我真的希望每个用户都有自己独特的图像/模式,但很明显,如果他们有点相似但不相同,那很好。老实说,我不知道这是否可能。

如果您需要一个完整的示例,我可以替换上面的代码。尽管上面的代码应该非常简单,使其成为一个完整的示例(唯一缺少的是生成 userID 并将其从字节转换为布尔数组(。

你所说的被称为IDENTICON

我实际上不知道它们是如何工作的,但我知道他们对UNIQUE TEXT使用某种哈希并使用该哈希生成图像。

这是我找到的两个网站,他们确实提供源代码,所以如果你有兴趣,你可以查看代码并从中提取任何有用的信息。

  1. http://identicon.net/
  2. https://jdenticon.com/

代码是JavaScript的,在一个网站上也是.NET和PHP的。

最新更新