java - 你如何生成随机模式并将它们转换为图像?
问题描述
我目前正在制作游戏。我有多个用户,每个用户都有一个 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 语句是为了避免索引越界(我知道我应该将布尔数组转换为与图像中有多少像素相同的长度)...
这确实产生了某种模式,但老实说,这是一个非常糟糕的模式。这些模式通常倾向于彼此非常相似。我想知道是否有人可以提供如何更好地做到这一点的提示/示例。通过我的小研究,我真的找不到太多。然而,我确实找到了我希望获得的模式,我相信它们被称为缠结模式。我真的希望每个用户都有自己独特的图像/图案,但很明显,如果它们有点相似但不一样,那很好。老实说,我不知道这是否可能。
如果您需要一个完整的示例,我可以替换上面的代码。尽管上面的代码应该非常直接地使其成为一个完整的示例(唯一缺少的是生成用户 ID 并将其从字节转换为布尔数组)。
解决方案
你所说的被称为IDENTICON
.
我实际上不知道它们是如何工作的,但我知道它们使用某种哈希UNIQUE TEXT
值并使用该哈希值生成图像。
这是我发现的两个提供源代码的网站,因此如果您有兴趣,可以查看代码并从中提取任何有用的信息。
PS。代码在 JavaScript 中,在一个网站上它也在 .NET 和 PHP 中。
推荐阅读
- android - 如何运行协程作为单元测试的阻塞?
- python - 无法从网页中获取表格中的所有 pdf 链接
- python - Matplotlib,绘制 x1 和 y,但在 python 中基于 x2 的颜色代码?
- android - Play 开发者控制台 - 多个封闭的测试轨道
- haskell - 使用方向移动的文字冒险游戏问题
- javascript - 忽略 div 中的标签,直到被点击
- angular - @ngx-share 分享按钮在 Angular 6 中不起作用
- symfony - Symfony 加载夹具
- python - 如何在 Visual Studio Code 的当前文件目录中运行 python 交互?
- javascript - 客户端的回调不会从 signalR 后端触发