为什么我的Pixel's Color没有变化?

时间:2014-04-24 15:24:05

标签: c# visual-studio-2010 bitmap

我尝试使用特定值更改任何像素的像素颜色。通过我的图片循环确实有效,通过值选择像素也可以,但是当我尝试更改其值时,没有任何反应。我没有收到错误,但在将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()不起作用,因为当我在更改后直接检查像素的值时,它就是之前的值。

1 个答案:

答案 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);
            }
}