如何比较两个列表并使用C#相应地设置像素值?
我有两个列表,List1包含图像“bmp”中每个像素的坐标(x,y),List2包含0,1,2,3,4和5之间的整数值。其中0表示最低有效位(0),5表示最高有效位(255)。0到255是不同级别的灰色 我的问题基本上是如何比较List1和List2,并根据List2中的信息设置图像“bmp”中的像素值如何比较两个列表并使用C#相应地设置像素值?,c#,image,list,C#,Image,List,我有两个列表,List1包含图像“bmp”中每个像素的坐标(x,y),List2包含0,1,2,3,4和5之间的整数值。其中0表示最低有效位(0),5表示最高有效位(255)。0到255是不同级别的灰色 我的问题基本上是如何比较List1和List2,并根据List2中的信息设置图像“bmp”中的像素值 因此,输出将是灰度图像,图像中每个像素的颜色根据我的列表2进行选择。尝试在列表上进行for循环,将其视为数组 for (int i=0, i < list1.count-1, i++) {
因此,输出将是灰度图像,图像中每个像素的颜色根据我的列表2进行选择。尝试在列表上进行for循环,将其视为数组
for (int i=0, i < list1.count-1, i++)
{
switch (list2[i])
{
# Making a fake method here - I'm basically faking that the SetPixel method
# takes in a coordinate and lets you set a value on that coordinate.
case 1:
bmp.Setpixel(list1[i]).value = 0;
break;
case 2:
bmp.Setpixel(list1[i]) value = 51;
break;
etc...
}
}
for(int i=0,i
您可以使用一个简单的循环和乘法来实现:
for (int i = 0; i < list2.Count; i++)
{
int c = list2[i] * 51;
bmp.SetPixel(list1[i].X, list1[i].Y, Color.FromArgb(c,c,c));
}
for(int i=0;i
这将基于list2
中的值创建颜色,然后设置相应像素的颜色(假设list1
的位置对应于list2
的值)。
让我知道这是否有帮助。如何将例如51指定给颜色阴影?这完全取决于您构建位图的方式。我相信@davidsbro的答案在这方面更完整。你能再给我解释一下吗,为什么你要把[I]乘以51?还有doeas(c,c,c)是什么意思?谢谢;)<代码>int c=list2[i]*51获取列表2中索引
i
处的值,并将其乘以51,得到所需的值(0=0、1=51、2=102等)。这基本上是一个快捷方式,因此您不必编写if(list2[i]==0)…else if(list2[i]==1).
颜色。FromArgb(c,c,c)从整数c
创建一种颜色,该整数是list2中标准化为颜色的值。如果还有什么不清楚的地方,请告诉我。谢谢你的评论,因为我只制作灰度图像,我还需要使用RGB值吗?只要RGB值相等,图像将是灰色的。但是,您必须使用RGB值,因为这是位图的基本构建块。对于我发布的代码,只要有颜色,图像将始终为灰色。FromArgb(c,c,c)
(因为R,G和B参数相等)。如果您还需要什么,或者这是否有帮助,请告诉我。:)它只是给了我一个错误:错误1'System.Collections.Generic.IEnumerable'不包含'Length'的定义,并且找不到接受'System.Collections.Generic.IEnumerable'类型的第一个参数的扩展方法'Length'(是否缺少using指令或程序集引用?)。错误2无法使用[]应用索引指向“System.Collections.Generic.IEnumerable”类型的表达式