我尝试使用特定值更改任何像素的像素颜色。通过我的图片循环确实有效,通过值选择像素也可以,但是当我尝试更改其值时,没有任何反应。我没有收到错误,但在将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()
不起作用,因为当我在更改后直接检查像素的值时,它就是之前的值。
答案 0 :(得分:1)
这是工作代码。请注意,我基于Bitmap
创建了新的.Image
,因为如果原始图片是索引颜色图片,则您无法使用.SetPixel
方法。
private static void ChangeColor()
{
foreach (MultiIcon mi in listMi)
foreach (SingleIcon si in mi)
for (int n = 0; n < si.Count(); n++)
{
IconImage ii = si[n];
Bitmap img = new Bitmap(ii.Image);
for (int w = 0; w < img.Width; w++)
for (int h = 0; h < img.Height; h++)
img.SetPixel(w, h, Color.Red);
ii.Set(img, null, Color.Transparent);
}
}