【问题标题】:How to convert scroll bar position to gamma correction?如何将滚动条位置转换为伽马校正?
【发布时间】:2016-11-28 09:59:10
【问题描述】:

我想构建一个由单个数字组成的常量数组 (1..200) 来制作一个“查找表”,以将值为 1 - 200 的滚动条的位置转换为用于将伽玛校正应用于图片。

第一个数组值的值在 7.0 - 9.9 之间(photoshop 使用 9.9)。中间的数组值 100 需要正好是 1.0。数组值 200 约为 0.01。

谁能告诉我使用哪种算法?

我一直试图在一些基于函数 Power(i, 2.2) 的测试代码中使用“反复试验”来制作数组,但没有成功。

我正在使用德尔福。我不是在问代码,只是在正确的方向上引导。任何帮助将不胜感激。

【问题讨论】:

  • 不用这样的查找表,直接用函数计算就好了。

标签: delphi graphics lookup gamma


【解决方案1】:

这不是一个真正的编程问题,而是一道数学题。

假设一个二次函数,形式为y=ax2+bx+c。

填写已知的三个值对:

9.9  = a + b + c
1    = 10000a + 100b + c
0.01 = 40000a + 200b + c

三个方程 + 三个未知数 = 可通过简单代入解决。

9.9 =   a + b + c
c   =   9.9 - a - b

1   =   10000a + 100b + c
1   =   10000a + 100b + 9.9 - a - b
1   =   9999a + 99b + 9.9
1 - 99b =   9999a + 9.9
-99b    =   9999a + 9.9 - 1
-99b    =   9999a + 8.9
b   =   -101a - 8.9/99

0.01    =   40000a + 200b + c
0.01    =   40000a + 200b + 9.9 - a - b
0.01    =   39999a + 199b + 9.9
0.01    =   39999a + 199(-101a - 8.9/99) + 9.9
0.01    =   39999a - 20099a - 17.89 + 9.9
0.01    =   19900a - 7.99
0.01 - 19900a   =   -7.99
-19900a =   -8
a   =   8/19900
a   =   0.000402

b   =   -101a - 8.9/99
b   =   -808/19900 - 8.9/99
b   =   -0.1305

c   =   9.9 - a - b
c   =   10.0301

换句话说:Gamma = 0.000402 * Pos^2 - 0.1305 * Pos + 10.0301

【讨论】:

【解决方案2】:

为什么不直接把差值按步数分开。

例如。 9.9-1 / 100 那么你就知道要增加的数量了。

我用javascript做了一个简单的例子来说明我的意思:

doWork = function() {

    var result = '';
    var first = 9.9;
    var middle = 1;
    var last = 0.01;

    var firstSteps = (first - middle) / 99;
    var lastSteps = (middle - last) / 100;

    result = result + 'first=' + firstSteps + '<br>';
    result = result + 'last=' + lastSteps + '<br>';

    var value = first;
    for (var i = 1; i < 201; i++) {
        var showValue = Math.round(value * 100) / 100;
        result = result + i + ' => ' + showValue + '<br/>';
        if (i > 99) {
            value = value - lastSteps;
        }
        else if (i == 99) {
            value = middle;
        }
        else {
            value = value - firstSteps;
        }
    }

    document.getElementById('info').innerHTML = result;

}

这是小提琴: https://jsfiddle.net/tuv5vfst/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 2012-10-10
    • 2011-09-28
    相关资源
    最近更新 更多