【发布时间】:2015-10-08 06:14:13
【问题描述】:
我有一个值对列表,描述了到给定像素的距离和我想要设置的百分比亮度:
Distance Brightness
0px 100%
1px 99%
2px 98%
3px 97%
etc.
我想转换我的值,使亮度值形成某种曲线。更接近的值(最多 10 像素)可能在 100-95 之间,其余的会下降得更快。
第一行是我已经拥有的线性行,第二行是我的目标。
另一个例子,我想要实现的目标: 我现在拥有的:
我想拥有什么:
我正在编写一个增亮画笔。如您所见,亮度是线性的。我希望它在圆圈中间变得更亮,并在圆圈边缘更大的“脱落”。
计算像素距离和亮度值的代码示例
private static Color LightenPixel(Vector2f center, Vector2f pixel, Color color)
{
//Calculate distance to circle origin
double x = Math.Pow((double)(center.X - pixel.X),2);
double y = Math.Pow((double)(center.Y - pixel.Y), 2);
double distance = Math.Sqrt(x + y);
//Get the percentual distance to the origin and flip the percentual value
// E.G. 80% becomes 20% for brightness => closer to origin => brighter
// -1 = 100% Darkness
// +1 = 100% Brightness
float brightness = (float)(1 - (distance * 100 / radius) / 100);
return ChangeColorBrightness(color, brightness);
}
编辑: 另一个关于我想要它的例子:
红色是我所拥有的,绿色是我想要的(不知何故)。
【问题讨论】:
-
你能告诉我们你已经做了什么吗? (你有一些代码吗?)
-
我添加了一个代码示例,说明如何计算给定像素到圆原点的距离和亮度值。
标签: c# math pixel sfml brightness