代码在本地与服务器上执行的代码不同

本文关键字:代码 执行 服务器 | 更新日期: 2023-09-27 18:35:45

我有一些C#代码正在根据色调进行关键颜色替换。在我的本地机器上,它执行得很好。但是,当我将其推送到服务器时,它会替换"一些"但不是所有颜色。就像它只是决定不运行部分代码一样。

这些图像是无损 PNG - 它们在服务器上完好无损。这是某种线程问题吗?我的代码在这里没有线程化(超出了网络服务器的功能),但是有没有人见过类似的事情发生?

如果我提到此代码是在单独的库项目中编译,然后从 MVC3 应用程序引用,这也可能会有所帮助。

谢谢,这是代码示例:

private void _ReplaceImageColor(Image img, Color baseColor, Color newColor)
{
    Bitmap bmp = (Bitmap)img;
    double baseHue = baseColor.GetHue();
    for (int x = 0; x < bmp.Width; x++)
    {
        for (int y = 0; y < bmp.Height; y++)
        {
            double pixelHue, pixelSat, pixelVal;
            ColorProcessor.ColorToHSV(bmp.GetPixel(x, y), out pixelHue, out pixelSat, out pixelVal);
            if (pixelHue == baseHue)
            {
                Color setColor = ColorProcessor.ColorFromHSV(newColor.GetHue(), pixelSat, pixelVal);
                bmp.SetPixel(x, y, setColor);
            }
        }
    }
}

这是ColorProcessor的方法,因为人们问...

public static void ColorToHSV(Color color, out double hue, out double saturation, out double value)
{
    int max = Math.Max(color.R, Math.Max(color.G, color.B));
    int min = Math.Min(color.R, Math.Min(color.G, color.B));
    hue = color.GetHue();
    saturation = (max == 0) ? 0 : 1d - (1d * min / max);
    value = max / 255d;
}
public static Color ColorFromHSV(double hue, double saturation, double value)
{
    int hi = Convert.ToInt32(Math.Floor(hue / 60)) % 6;
    double f = hue / 60 - Math.Floor(hue / 60);
    value = value * 255;
    int v = Convert.ToInt32(Math.Max(value, 0));
    int p = Convert.ToInt32(Math.Max(value * (1 - saturation), 0));
    int q = Convert.ToInt32(Math.Max(value * (1 - f * saturation), 0));
    int t = Convert.ToInt32(Math.Max(value * (1 - (1 - f) * saturation), 0));
    if (hi == 0)
        return Color.FromArgb(255, v, t, p);
    else if (hi == 1)
        return Color.FromArgb(255, q, v, p);
    else if (hi == 2)
        return Color.FromArgb(255, p, v, t);
    else if (hi == 3)
        return Color.FromArgb(255, p, q, v);
    else if (hi == 4)
        return Color.FromArgb(255, t, p, v);
    else
        return Color.FromArgb(255, v, p, q);
}

代码在本地与服务器上执行的代码不同

您可能需要非常仔细地检查服务器上的 dll 引用是否与开发计算机上的引用相同。 Hanselman最近有一篇关于这件事的文章: 确认您在生产环境中的期望和版本号

此外,由于它在调试模式和发布模式下的行为不同,请检查它在构建中是否使用相同的位数来消除可能在浮点数上表现出来的潜在变化(例如 x86)。