二维双数组到图像

2d double array to image

我目前正在使用连续代理进行模拟,它在二维双阵列上留下信息素踪迹。信息素轨迹需要在二维阵列上,因为需要执行均值过滤器的扩散。最终,我需要通过将双数组直接转换为 awt.Image.

来可视化代理和信息素轨迹

基本上创建一个BufferedImage,作为 by Gilbert Le Blanc并使用其setRGB方法设置像素(或获取其Graphics在其上绘制)。

示例,假设值介于 0.01.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:关于我们的感知,张贴到灰色的映射不一定是最好的计算