为什么不';t我的像素';s颜色变化
本文关键字:颜色 变化 为什么不 我的 像素 | 更新日期: 2023-09-27 17:59:47
我正在尝试更改具有特定值的任何像素的像素颜色。循环浏览我的图片确实有效,按值选择像素也很好,但当我试图更改其值时,什么也不会发生。我没有收到错误,但在将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()
不起作用,因为当我在更改像素后直接检查它的值时,它是以前的值。
这是工作代码。注意,我在.Image
的基础上创建了新的Bitmap
,因为如果原始图像是索引彩色图像,则不能使用.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);
}
}