2012-11-24 41 views
3

RGBA值的C#转换目前,我正在把一些Python代码到C#,和我遇到的RGBA C#库Python来不工作

# Original Python Code: 
    d = math.sqrt((x - size/2.0)**2 + (y - size/2.0)**2) 
    rgbVal = int(200*d/md + 50) 
    rgba = (0,0,0, 255 - rgbVal) 
    img.putpixel((x,y), rgba) 

// My C# Code 
double d = Math.Sqrt(Math.Pow((x - DotSize/2.0), 2) + Math.Pow((y - DotSize/2.0), 2)); 
int rgbVal = (int) (200 * d/md + 50); 
Color color = Color.FromArgb(255 - rgbVal, 0, 0, 0);  // ** ERROR ** 
img.SetPixel(x,y, color); 

在代码d的两个实例是一个问题等于106,md等于53.然而,得到的rgbVal值是450. 这显然意味着255-450是-195,由于每个单独值必须介于0和255之间,所以会引发错误。 任何人都有任何想法如何解决这个问题。请注意,在运行python和C#版本时,数据是相同的。

回答

0

您可以使用mod将值标准化。

// I'm a little confused by your code, so it's this 
Color color = Color.FromArgb(255 - ((-190 + 255) % 255), 0, 0, 0); 
// or this... 
Color color = Color.FromArgb(((-190 + 255) % 255), 0, 0, 0); 
+0

但问题是,Python代码的第一次迭代的最后一行(BOT的代码集是在一个循环中)。将img.SetPixel(0,0,(0,0,0, - 195)),这将与C#相同。但我不明白为什么python不抱怨和C#是? – clangers

+0

我想我可能已经解决了我自己的问题。我将这些值转换为32位颜色值,而不是传入各个值。 – clangers