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