为什么不';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()不起作用,因为当我在更改像素后直接检查它的值时,它是以前的值。

为什么不';t我的像素';s颜色变化

这是工作代码。注意,我在.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);
            }
}