【问题标题】:Java - How to convert a Color.toString() into a Color?Java - 如何将 Color.toString() 转换为颜色?
【发布时间】:2010-03-06 22:56:53
【问题描述】:

为了在我的应用程序中保存图形对象的颜色属性,我将此颜色的字符串表示形式保存在数据文件中。 例如,对于红色,我保存:java.awt.Color[r=255,g=0,b=0]。 如何将此字符串表示形式转换为颜色,以便在加载数据文件后再次使用它?

谢谢。

【问题讨论】:

    标签: java colors


    【解决方案1】:

    您可能希望使用getRGB() 而不是toString()。你可以打电话

    String colorS = Integer.toString(myColor.getRGB());

    然后就可以调用了

    Color c = new Color(Integer.parseInt(colorS));

    【讨论】:

    • 我认为“整数”需要大写。谢谢。
    【解决方案2】:

    Stephan 的回答帮助了我。但是,我发现我需要在语法中添加“true”才能恢复颜色。

    // convert to string
    String colorS = Integer.toString(myColor.getRGB());
    
    // restore colour from string
    Color c = new Color(Integer.parseInt(colorS), true);
    

    【讨论】:

      【解决方案3】:

      使用toString()“可能因实现而异。”而是保存String.valueOf(color.getRGB()) 以供以后重建。

      【讨论】:

      • 如果颜色定义在另一个颜色空间中怎么办?毕竟 r/g/b 可能是一个近似值。
      • 颜色应该在默认的 sRGB 颜色空间中重建,建议here
      【解决方案4】:

      来自Color#toString的文档

      返回此Color 的字符串表示形式。 此方法仅用于调试目的。返回字符串的内容和格式可能因实现而异。返回的字符串可能为空,但不能为null

      换句话说,我不会依赖能够将字符串反向转换为Color。但是,如果您坚持这样做,您可以尝试从字符串中解析出数字,并希望它能在没有保证的情况下工作。

      这样的东西现在似乎对我有用

          Scanner sc = new Scanner("java.awt.Color[r=1,g=2,b=3]");
          sc.useDelimiter("\\D+");
          Color color = new Color(sc.nextInt(), sc.nextInt(), sc.nextInt());
      

      不过,我不建议实际这样做。

      【讨论】:

        【解决方案5】:

        我建议您改用 java 的内置序列化技术。 (我注意到 Color 实现了 Serializable。)

        【讨论】:

          【解决方案6】:

          使用 getRGB() 方法获取 Color 的 int 表示,然后保存 int 值并使用该值重新创建 Color。无需解析。

          【讨论】:

            【解决方案7】:

            最简单的事情是重新考虑存储字符串表示的方式。去掉所有的标签,只将红色存储为字符串“0xFF0000”。然后,您可以轻松地解析该字符串以获取 rgb 的单个值,并将其发送到 Color 构造函数。

            另一种方法是解析更复杂的字符串,因为您现在将其保存为“java.awt.Color[r=255,g=0,b=0]”。

            您可以在此处查看 Color 的构造函数: http://java.sun.com/javase/6/docs/api/(在“所有类”中搜索颜色)。

            彼得

            【讨论】:

              【解决方案8】:

              不要使用toString()。使用getRGB() / new Color(rgb) 保存/恢复颜色值。

              【讨论】:

                猜你喜欢
                • 2017-07-19
                • 2011-06-03
                • 2013-08-04
                • 2021-11-27
                • 1970-01-01
                • 2015-09-22
                • 2010-09-26
                • 2011-08-25
                • 1970-01-01
                相关资源
                最近更新 更多