如何使用C#存储具有颜色值的像素的位置?

时间:2014-03-05 19:03:32

标签: c# image list

我正在制作一些列表,其中包含我图像中每个像素的颜色值(黑色为0,白色为1)。我的问题是,当我完成每个列表时,它只给我一个只有0和1的单维数组但我不知道当我想绘制输出图像时它属于哪个像素。 任何人都可以告诉我,如果我可以在列表中同时存储像素的位置以及颜色值吗?还是其他任何替代方案?

4 个答案:

答案 0 :(得分:1)

Dictionary<Drawing.Point, int> pixelLocations = new Diciontary<Drawing.Point, int>();

会做你想做的事。

编辑:除非您没有将您的位置存储为积分。如果它们不是Point,那么只需用Drawing.Point替换您正在使用的任何数据类型。

答案 1 :(得分:1)

回答以下问题:

  

任何人都可以告诉我是否可以存储像素的位置以及   在我的列表中同时的颜色值?或任何其他   替代?

如果使用.NET Framework 4或更高版本,则可以使用Tuple来存储值。按照以下方式填充元组:

var LocXLocYColor = new Tuple<int, int, bool>(1, 1, true);

您可以使用foreach遍历所有这些值:

int locx, locy;
bool color;

foreach(var itm in LocXlocYColor)
{
    locx = itm.Item1;
    locy = itm.Item2;
    color = itm.Item3;
}

更多元组信息:MSDN

当您想要将像素位置分开存储为整数时,可以使用上面的代码。 利用词典是满足您需求的另一种方式:

创建一个新词典:

Dictionary<Point, bool> locationColor = new Dictionary<Point, bool>();

使用位置和颜色填充字典:

locationColor.Add(new Point(1, 1), true);
...

循环字典中的项目:

Point location;
bool color;
foreach(KeyValuePair<Point, bool> itm in locationColor)
{
    location = itm.Key;
    color = itm.Value;th entry.Value or entry.Key
}

如果使用Point,请不要忘记在您的课程中加入System.Drawing;

更多积分信息:MSDN

答案 2 :(得分:1)

您可以使用列表来了解像素的位置(假设您知道宽度或高度)。

如果排列像素以便存储顶行像素,那么第二行等,你可以获得这样的位置(原点是1,1):

mylist[wantedY * width - (width - wantedX - 1)]

wantedY是Y位置,wantedX是X位置。

但是,如果像素按列排列(以便x = 0的像素,则x = 1等),您可以使用:

mylist[wantedX * height - (height- wantedY - 1)]

答案 3 :(得分:1)

不使用列表,而是使用二维数组

bool[,] isWhite = new bool[bmp.Width, bmp.Height];

并将值存储在此数组中的相应位置

isWhite[x, y] = theColor == Color.White;

像素的位置是阵列中的位置。无需单独存储。