【发布时间】:2012-05-29 22:30:11
【问题描述】:
我有一些基于色调进行键色替换的 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);
}
【问题讨论】:
-
ColorProcessor来自哪里? -
你需要先做一些调查。您能否创建一个数据测试以在两者上使用并将其缩小到单个失败的数据。然后调查代码中的异常?
-
我认为这里值得一提:阅读此链接中的
Caution框,指向 MSDN 上的System.Drawing命名空间:msdn.microsoft.com/en-us/library/xs6ftd89 -
对不起,
ColorProcessor是另一个班级,我必须为这个项目管理一堆其他颜色任务。如果您需要那里的代码,我会发布它。这里我只是将 RGB 转换为 HSV 值,用于基于色调的颜色匹配。 -
感谢 Beemer,它不是一个 .NET 服务,它只是一个 MVC3 应用程序。我已经这样做了几十次,但这是第一次发生任何奇怪的事情。 Preet - 一切正常,除了在服务器上跳过了一些关键颜色。每次都以同样的方式发生。
标签: c# asp.net image-processing