【发布时间】:2014-04-25 01:11:54
【问题描述】:
我正在尝试更改具有特定值的任何像素的像素颜色。循环浏览我的图片确实有效,按值选择像素也可以,但是当我尝试更改其值时,什么也没有发生。我没有收到错误,但是在将 MultiIcon(基本上是图标的容器)保存为新的 .ICO 后,它的颜色与原始文件相同。
private static void LoadIcons()
{
foreach(string path in pathArray)
{
MultiIcon mi = new MultiIcon();
mi.Load(path);
listMi.Add(mi);
}
}
private static void ChangeColor()
{
foreach(MultiIcon mi in listMi)
foreach (SingleIcon si in mi)
for (int n = 0; n < si.Count(); n++)
for (int w = 0; w < si[n].Image.Width; w++)
for (int h = 0; h < si[n].Image.Height; h++)
si[n].Image.SetPixel(w, h, Color.Red);
}
private static void SaveIcons()
{
int i = 0;
foreach(MultiIcon mi in listMi)
{
if(!Directory.Exists(directory+"/modified"))
Directory.CreateDirectory(directory + "/modified");
mi.Save(NewPath(pathArray[i]), MultiIconFormat.ICO);
i++;
}
}
MultiIcon 来自 iconLib:
http://www.codeproject.com/Articles/16178/IconLib-Icons-Unfolded-MultiIcon-and-Windows-Vista
但我很确定,Image.SetPixel() 不起作用,因为当我在更改像素后直接检查像素值时,它是之前的值。
【问题讨论】:
-
要回答这个问题,我们需要查看保存代码。您还可以删除
if条件并将所有像素设置为红色吗?si[n].Image.SetPixel(w, h, Color.Red);以确保将if条件评估为 false 不是问题。 -
您是否确认您点击了 SetPixel 行(通过放置断点、添加日志记录或添加消息框)
-
@Ulugbek Umirov 照你说的做了,没有效果。
-
问题是
.Image属性返回的是内部缓冲区的副本,而不是指向它的链接。您的更改将应用于副本。所以你需要拍摄图像,改变它,然后使用.Set方法来应用改变。
标签: c# visual-studio-2010 bitmap