【问题标题】:Why doesn't my Pixel's Color change?为什么我的 Pixel 的颜色没有变化?
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 2021-04-01
    • 2020-05-18
    相关资源
    最近更新 更多