【问题标题】:Hex to BGR Hex conversion for KML color in JavaJava中KML颜色的十六进制到BGR十六进制转换
【发布时间】:2012-09-14 02:04:01
【问题描述】:

我正在构建一个实用程序,它在基于网络的地图上制作地标并将它们导出到 KML 以在 Google 地球中使用。问题是我给出的十六进制值是标准 RGB,而 KML 需要 BGR(AABBGGRR,其中 AA 是 alpha,但这在这里不相关)。对于像红色(FF0000)这样的简单颜色,转换很简单:0000FF。但是,我发现像 7DCCFF(就像浅蓝色)这样的东西,简单地反转字符串不会在 Google 地球中产生相同的颜色。我在这里遗漏了一些明显的东西吗?

提前致谢!

【问题讨论】:

    标签: java colors hex kml rgb


    【解决方案1】:

    我开发了一个简单的 PHP 工具来转换 KML / RGB 颜色,使用这两个 PHP 函数:

    function rgbToKml($color, $aa="ff"){
    $rr = substr($color, 0, 2);
    $gg = substr($color, 2, 2);
    $bb = substr($color, 4, 2);
    return $aa.$bb.$gg.$rr;
    }
    function kmlToRgb($color){
    $rr = substr($color, 6, 2);
    $gg = substr($color, 4, 2);
    $bb = substr($color, 2, 2);
    return $rr.$gg.$bb;
    }
    

    在此处查看示例:http://netdelight.be/kml/

    【讨论】:

      【解决方案2】:

      怎么样:

      用正则表达式(?<=\G..)分割

       String color = "123456";
       String[] list = color.split("(?<=\\G..)");
       for(String s : list) {
           System.out.println(s);
       }
      

      这将为您提供以下输出:

      12
      34
      56
      

      现在您只需在list[0], list[1] and list[2] 之间进行一些交换

      正则表达式(?&lt;=\G..) 匹配具有最后一个匹配项 (\G) 后跟两个字符 (..) 之前它((?&lt;= )

      【讨论】:

      • 是的,您的回答让我意识到我做错了什么,以及为什么它适用于黄色等颜色。反转字符串会交换各个颜色的值。谢谢!
      猜你喜欢
      • 2019-10-29
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-03
      相关资源
      最近更新 更多