【问题标题】:How can I convert an RGB color to a KML hexadecimal color string?如何将 RGB 颜色转换为 KML 十六进制颜色字符串?
【发布时间】:2019-01-01 08:41:04
【问题描述】:

在 MATLAB 中,我有由 x,y,z 坐标值和颜色定义的数据。现在我想使用 KLM 工具箱为 Google 地球创建一个 kmz 文件。为了定义一个颜色数组,我使用'iconColor' 属性,其输入“必须是有效的十六进制颜色字符串输入,样式为AABBGGRR”

将我的 RGB 颜色数组转换为十六进制颜色字符串的好方法是什么?如果我想使用不同的颜色图(喷气式或冬季)怎么办?

【问题讨论】:

    标签: matlab colors kml kmz


    【解决方案1】:

    MATLAB 中的built-in colormaps 将为您提供从 0(最低强度)到 1(最高强度)缩放的 RGB 颜色三元组矩阵。要将单个 RGB 三元组转换为其 KML color style equivalent(使用 AABBGGRR 格式),步骤如下:

    • 将其从 0 缩放到 255。
    • Flip BGR 的订单。
    • 在开头添加一个透明度值(0 表示完全透明,255 表示完全不透明)。
    • 转换为uint8 类型以确保您的整数范围在0 到255 之间。
    • 使用dec2hex 转换为十六进制字符串。
    • Reshape 将结果转换为 1×8 字符数组。

    这是一个例子:

    >> color = [1 1 0];  % The RGB triple for yellow
    >> hexColor = reshape(dec2hex(uint8([255 255.*flip(color, 2)])).', 1, 8)
    
    hexColor =
    
    FF00FFFF
    

    如果您想转换整个颜色图(即N-by-3 矩阵,每行一个 RGB 三元组),您可以像这样修改上面的代码:

    >> N = 10;        % Number of colors
    >> map = jet(N);  % 10-by-3 jet colormap
    >> hexMap = reshape(dec2hex(uint8([255.*ones(N, 1) 255.*flip(map, 2)]).').', 8, []).'
    
    hexMap =
    
    FFAA0000
    FFFF0000
    FFFF5500
    FFFFAA00
    FFFFFF00
    FFAAFF55
    FF55FFAA
    FF00FFFF
    FF00AAFF
    FF0055FF
    

    【讨论】:

    • 谢谢!很有用! 1 个问题 - 为我的 double 值数组获取 RBG 三元组的好方法是什么?
    • @NikkeyD:您可能希望首先使用N 颜色创建您的颜色图。然后缩放您的双精度值,使最小值和最大值转换为 1 到 N 的范围,然后将它们四舍五入为整数值,以便为每个双精度值获取行索引到您的颜色图中。
    猜你喜欢
    • 2012-11-01
    • 2011-04-06
    • 2022-08-10
    • 2012-07-25
    • 2011-07-30
    • 2014-04-25
    • 2016-12-27
    • 2012-11-24
    • 2020-09-28
    相关资源
    最近更新 更多