给定基色计算渐变填充的开始颜色和结束颜色
我有一个 WTL C++ 应用程序,我希望用户能够为某些 UI 元素选择不同的颜色,并使用 GradientFill
API 调用应用渐变填充。但是,我希望他们能够选择“基”颜色,并让我的应用程序自动计算合适的开始/结束颜色,而不是让用户选择渐变的开始和结束颜色。我希望最终获得与 Windows 用于各种主题元素的填充类似的填充。基色可以是渐变的“中间”颜色,我的应用程序以某种方式计算渐变开始的稍浅的颜色和渐变结束的稍深的颜色。或者,我可以使用基础颜色作为起始颜色并计算结束颜色,反之亦然。
我确信使用一些 RGB 宏魔法这会相对容易,但我真的不知道从哪里开始。任何想法都会受到欢迎。
I have a WTL C++ application and I want the user to be able to select different colours for some of the UI elements and apply a gradient fill using the GradientFill
API call. However, instead of letting the user pick the start and end colours for the gradient, I'd like them to be able to select a 'base' colour and for my application to calculate suitable start/end colours automatically. I want to end up with a fill that is similar to the one Windows uses for various themed elements. The base colour could be the 'middle' colour of the gradient with my application somehow computing a slightly lighter colour for the gradient start and a slightly darker colour for the gradient end. Alternatively I could use the base as the start colour and compute the end or vice-versa.
I'm sure this would be relatively easy with some RGB macro magic but I really don't know where to start. Any ideas would be welcome.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
RGB 色彩空间不适合这种情况。使用HSL或HSV:通过改变个体很容易自动生成好看的渐变成分。您可以在 API 中使用的从 HSL/V 转换为 RGB 三元组的方法是 简单。
The RGB color space is not suitable for this. Use HSL or HSV: it is easy to auto-generate a good looking gradient by varying an individual component. Converting from HSL/V to an RGB triplet you can use in the API is simple.