Tag: hsl

更快的算法来改变位图中的色调/饱和度/亮度

我正在尝试过滤位图图像以增加或减少色调,饱和度和亮度值。 我的代码工作得很好,但速度很慢 。 我在内存中锁定了两个位图,原始源和当前目标。 用户可以移动各种轨迹栏控件来修改每个值,然后将其转换为HSL值。 例如,轨迹栏上的值对应于-1.0到1.0的范围。 每次抛出轨道栏值发生变化的事件时,我都会运行一个锁定目标位图的函数,并将HSL值与源位图一起应用,然后将结果存储在目标位图中。 完成后,我解锁目标位图并在屏幕上绘制图像。 以前我使用查找表来处理其他filter,因为我正在进行每字节操作。 但是我不知道如何使用HSL来应用它。 这是我正在使用的代码: byte red, green, blue; for (int i = 0; i < sourceBytes.Length; i += 3) { blue = sourceBytes[i]; green = sourceBytes[i + 1]; red = sourceBytes[i + 2]; Color newColor = Color.FromArgb(red, green, blue); if (ModifyHue) newColor = HSL.ModifyHue(newColor, Hue); if (ModifySaturation) newColor […]

RGB到HSL和返回,计算问题

我正在尝试将RGB转换为HSL,我也想将HSL转换为RGB,我已经为它编写了一个类但是如果我做RGB-> HSL-> RGB来尝试它是否有效我会得到一个不同的值。 示例案例:如果通过执行HSLColor MyTestConversion = HSLColor.FromRGB(Colors.Green);创建HSLColor对象HSLColor MyTestConversion = HSLColor.FromRGB(Colors.Green); 然后做Color ExpectedGreenHere = MyTestConversion.ToRGB()你得到一个不同于Colors.Green颜色,而它是原始输入所以出错了.. 这是我正在使用的代码: public class HSLColor { public float Hue; public float Saturation; public float Luminosity; public HSLColor(float H, float S, float L) { Hue = H; Saturation = S; Luminosity = L; } public static HSLColor FromRGB(Color Clr) { return FromRGB(Clr.R, Clr.G, […]