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

时间:2018-06-16 07:36:14

标签: java image

我正在制作游戏。我有多个用户,每个用户都有一个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并将其从字节转换为布尔数组)。

1 个答案:

答案 0 :(得分:1)

您所谈论的内容称为 IDENTICON

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

以下是我发现的两个提供源代码的网站,如果您感兴趣,可以查看代码并从中提取任何有用的信息。

  1. http://identicon.net/
  2. https://jdenticon.com/
  3. <强> PS。代码在JavaScript中,在一个网站上也在.NET和PHP中。