java - 二维双数组图像
问题描述
我目前正在使用连续代理进行模拟,它会在二维双数组上留下信息素轨迹。信息素轨迹需要在 2d 阵列上,因为需要执行带有均值滤波器的扩散。最终,我需要通过将双精度数组直接转换为awt.Image
.
解决方案
基本上按照Gilbert Le Blanc的建议创建一个BufferedImage
,并使用它的方法来设置像素(或让它在上面绘制)。setRGB
Graphics
示例,假设值介于0.0
和之间1.0
,转换为灰色:
private static BufferedImage create(double[][] array) {
var image = new BufferedImage(array.length, array[0].length, BufferedImage.TYPE_INT_RGB);
for (var row = 0; row < array.length; row++) {
for (var col = 0; col < array[row].length; col++) {
image.setRGB(col, row, doubleToRGB(array[row][col]));
}
}
return image;
}
private static int doubleToRGB(double d) {
var gray = (int) (d * 256);
if (gray < 0) gray = 0;
if (gray > 255) gray = 255;
return 0x010101 * gray;
}
doubleToRGB
可以更改为使用从值到颜色的更复杂的映射。
例如红色表示较低的值,蓝色表示较高的值:
private static int doubleToRGB(double d) {
float hue = (float) (d / 1.5);
float saturation = 1;
float brightness = 1;
return Color.HSBtoRGB(hue, saturation, brightness);
}
注意:发布的代码只是为了展示这个想法 - 可以/必须优化 - 缺少错误检查
注 2:发布到灰色的映射不一定是关于我们感知的最佳计算
推荐阅读
- python - 异常处理下载股票数据
- java - 如何使用 ADB 或命令提示符通过 wifi 连接设备
- swift - 如何在 Swift 中的方形 UIBezier 中绘制角曲线?
- django - AbstractUser 的 UserAdmin 中的额外字段
- go - 为什么从代码中调用 Setenv 不起作用?
- unit-testing - 什么是开发人员的 API 级别测试?
- java - 如何将托管在 ASP.net MVC 网站上的 SignalR 服务器连接到 JAVA Swings 软件客户端
- python - IntEnum 在 _missing_ 中返回缺失的整数会引发 TypeError
- spring - Spring 请求映射正则表达式“不包含”不起作用
- python - 为什么 toTitle 在 Go 中不将小写单词大写?