색조에 따라 키 색상을 바꾸는 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
의 방법입니다 ... 당신은 매우 신중하게 DLL 참조가 있는지 확인 할 수 있습니다
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'란 무엇입니까? –
먼저 조사를 좀 더해야합니다. 두 가지 모두에 사용할 데이터 테스트를 만들고 실패한 단일 데이터를 좁힐 수 있습니까? 그런 다음 코드에서 예외를 조사하십시오. –
여기에 언급 할 가치가 있다고 생각합니다. MSDN의 'System.Drawing' 네임 스페이스에 대한 링크에서'주의 '상자를 읽으십시오. http://msdn.microsoft.com/en-us/library/xs6ftd89 – BeemerGuy