我有一个整数列表,其中我存储了一个图像的RGB值,但是在以整数存储值之和后,它变为负数,而数组中的所有值都是正数,这是代码!
Bitmap bi = new Bitmap(@"E:\Store Signature Data\01\01_1.bmp");
bi = ResizeImage(bi, 20, 20);
Color[,] imgary = new Color[bi.Width, bi.Height];
for (int x = 0; x < bi.Width; x++)
{
for (int y = 0; y < bi.Height; y++)
{
imgary[x, y] = bi.GetPixel(x, y);
}
}
List<int> RGB = new List<int>();
int c = 0;
//RGB value= Red + (Green*256) + (Blue*256*256)
for (int i = 0; i <20; i++)
{
for (int a = 0; a < 20; a++)
{
c++;
Console.WriteLine(imgary[i,a]+" "+c);
Color Pixels = imgary[i, a];
int Red = Pixels.R;
int Blue = Pixels.B;
int Green = Pixels.G;
RGB.Add(Red + (Green * 256) + (Blue * 256 * 256));
}
}
int total = 0;
for (int i = 0; i < RGB.Count; i++)
{
total += Math.Abs(RGB[i]);
}
Math.Abs(total);
Console.WriteLine(total);
答案 0 :(得分:1)
您在列表中插入20 * 20 = 400 RGB
个值。所以,让我们说每个人都是蓝色的。您将添加400次0xFF0000
。结果总和为0x18FFFFE70
,但(32位)int
可以将0x7FFFFFFF
作为最大值。第一位(0x80000000
)表示值的符号。
由于你的总和溢出了int
(通过使用它的第一位),结果总和可能是负数。
如果您知道不会超过400个值,请考虑使用Int64
。
答案 1 :(得分:0)
您的int
似乎被分配了一个高于C#(2,147,483,647)
中可接受的最大值的值,这会使其溢出为负值。
检查这些问题 - 它们可能有用: