二维双数组到图像
2d double array to image
我目前正在使用连续代理进行模拟,它在二维双阵列上留下信息素踪迹。信息素轨迹需要在二维阵列上,因为需要执行均值过滤器的扩散。最终,我需要通过将双数组直接转换为 awt.Image
.
来可视化代理和信息素轨迹
基本上创建一个BufferedImage
,作为 by Gilbert Le Blanc并使用其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);
}
注意:发布的代码只是为了展示想法 - can/must 被优化 - 缺少错误检查
注 2:关于我们的感知,张贴到灰色的映射不一定是最好的计算
我目前正在使用连续代理进行模拟,它在二维双阵列上留下信息素踪迹。信息素轨迹需要在二维阵列上,因为需要执行均值过滤器的扩散。最终,我需要通过将双数组直接转换为 awt.Image
.
基本上创建一个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);
}
注意:发布的代码只是为了展示想法 - can/must 被优化 - 缺少错误检查
注 2:关于我们的感知,张贴到灰色的映射不一定是最好的计算