【发布时间】:2011-12-27 16:43:12
【问题描述】:
我正在用 Java 构建一个应用程序,其中不同的土地块由一组地块组成。我想用不同的颜色为不同的补丁上色。我的地图显示了补丁的包裹。然而,两个补丁可以有共同的包裹。在那种情况下,我想用一些中间颜色(两个补丁颜色的混合)为这些包裹着色。由于我不知道要选择多少补丁,我必须为循环中的补丁分配随机颜色。然后我必须为那些相交的包裹解析颜色。关于在 java 中执行此操作的最佳方法有什么想法吗?
【问题讨论】:
我正在用 Java 构建一个应用程序,其中不同的土地块由一组地块组成。我想用不同的颜色为不同的补丁上色。我的地图显示了补丁的包裹。然而,两个补丁可以有共同的包裹。在那种情况下,我想用一些中间颜色(两个补丁颜色的混合)为这些包裹着色。由于我不知道要选择多少补丁,我必须为循环中的补丁分配随机颜色。然后我必须为那些相交的包裹解析颜色。关于在 java 中执行此操作的最佳方法有什么想法吗?
【问题讨论】:
为了混合颜色,您可以通过 getRed()、getBlue() 等或 getColorComponents() 获取单独的 R、G、B 值,然后取每个值的平均值,然后创建新颜色。您还可以平均 HSB 值。您还可以使用 alpha(透明度),用 0.5 的 alpha 绘制每种原始颜色。然而,在某些时候,所有这些微妙的混合对于用户来说变得难以理解。相反,您可能希望在原始颜色中使用一些图案(如条纹)。
我尝试了很多方法来挑选“好”的随机颜色,但都没有取得太大的成功。最好的技术使用 HSB 值。假设你需要 5 种颜色。将 360 度除以 5 并在这些角度“围绕”色轮选择色调。这工作正常。如果你喜欢非常明亮的完全饱和的颜色。
IMO,请考虑将至少“最常见”的包裹颜色硬编码为看起来不错的东西。尽可能少地随机选择颜色。
【讨论】:
我不知道这个问题的明显解决方案,但我想你可以使用平均 rgb 组件。 例如,您在 RGB 表示法中有两种颜色:A(100,0,0) 和 B(0,100,0)。结果颜色将为 C(50, 50, 0)。
注意:在这种情况下,您保存不变的“两个相同颜色之间的交集将是相同颜色”
【讨论】: