编辑:解决了!我只是将结果乘以-1,这解决了问题
我正在尝试将范围从-1.0到1的双精度转换为0到255之间的整数。但是当我尝试这样做时,它会返回负值。我尝试过使用那些在这里提出同样问题的人的代码,但我似乎无法让它像它应该的那样工作。
生成双精度的代码:
temp = perlinMap.GetValue((double)(x / this.samples), (double)(y / this.samples), 1d);
if (temp <= 0.1d && temp >= -1.0d)
{
colorArray[(int)x, (int)y] = toGradient(temp, -1.0d, 0.1d, 0.0d, 0.0d, 104d, 153d, 173d, 255d);
}
方法:
Color toGradient(double value, double minValue, double maxValue, double rMin, double rMax, double gMin, double gMax, double bMin, double bMax)
{
r = (((value - minValue) * (rMax - rMin)) / (maxValue - minValue)) + rMin;
g = (((value - minValue) * (gMax - rMin)) / (maxValue - minValue)) + gMin;
b = (((value - minValue) * (bMax - rMin)) / (maxValue - minValue)) + bMin;
color = Color.FromArgb(255, (int)r, (int)g, (int)b);
return color;
}
相同的方法,不同的方法。返回相同的负数数字
Color toGradient(double value, double minValue, double maxValue, double rMin, double rMax, double gMin, double gMax, double bMin, double bMax)
{
r = (double)(rMin + ((value - minValue) * (rMax - bMin) / (maxValue - minValue)));
g = (double)(gMin + ((value - minValue) * (gMax - bMin) / (maxValue - minValue)));
b = (double)(bMin + ((value - minValue) * (bMax - bMin) / (maxValue - minValue)));
color = Color.FromArgb(255, (int)r, (int)g, (int)b);
return color;
}
答案 0 :(得分:0)
我认为在使用这个公式之前你应该做的第一件事是使用翻译。为了从-1和1之间的值中删除所有负数值,您应首先将1添加到所有这些元素,然后应用最小 - 最大变换。我认为这将完成工作