C# Can';不清除带有颜色的位图。橙色

C# Can';不清除带有颜色的位图。橙色,c#,colors,bitmap,icons,argb,C#,Colors,Bitmap,Icons,Argb,我正在为一组winforms/clickonce应用程序动态创建图标。通过遵循和适应C#,我可以让一切正常运转 我想为不同的环境使用不同的背景颜色,例如,Live的背景为白色,QA的背景为黄色,而DEV的背景应为橙色。一切似乎都很简单,我已经能够使用以下方法创建带有白色和黄色背景的temp.ico: private static void CreateTempIcon(int size) { var myBmp = new Bitmap(size, size);

我正在为一组winforms/clickonce应用程序动态创建图标。通过遵循和适应C#,我可以让一切正常运转

我想为不同的环境使用不同的背景颜色,例如,Live的背景为白色,QA的背景为黄色,而DEV的背景应为橙色。一切似乎都很简单,我已经能够使用以下方法创建带有白色和黄色背景的temp.ico:

    private static void CreateTempIcon(int size)
    {
        var myBmp = new Bitmap(size, size);
        var graphics = Graphics.FromImage(myBmp);
        var bgColor = GetIconBgColor();

        graphics.Clear(bgColor);

        var myIcon = Icon.FromHandle(myBmp.GetHicon());
        var st = new FileStream(TempIcon, FileMode.Create);
        var wr = new BinaryWriter(st);
        myIcon.Save(st);
        myBmp.Dispose();
        wr.Close();
    }

    private static Color GetIconBgColor()
    {
        switch (ApplicationSettings.Branch)
        {
            case BranchType.Live:
                return Color.White;
            case BranchType.Dev:
                return Color.Orange;
            case BranchType.QA:
                return Color.Yellow;
            default:
                throw new ArgumentOutOfRangeException();
        }
    }
除了橙色显示为红色外,所有颜色都显示正确

我试过各种方法,包括

  • 使用像素格式创建位图

    var myBmp = new Bitmap(size, size, PixelFormat.Format32bppArgb);
    
  • 从argb创建颜色

    return Color.FromArgb(255, 255, 165, 0);
    
  • 以及使用/不使用alpha通道、使用Color.FromColor等的变化。就像我的调色板仅限于几个基本颜色一样。上面的链接说,最初的图标是24位的颜色,据我所知,其中包括橙色


    我对图像格式了解不多(很明显!)。谁能告诉我我做错了什么

    您是否尝试过用其他颜色替换颜色。橙色,以确定这是否与颜色或逻辑的其他部分有关?考虑用黄色替换它,因为你知道这在你的代码> GeTyBibgCu色[方法]的下游工作。我知道这不是你想要的,但是如果你保存位图<代码> MybMP。保存(文件路径)< /代码>在清除图像>代码>图形之后,会发生什么?代码>。查看文件路径中保存的文件是否为橙色。@LordWilmore-是,它与其他颜色(包括红色、黄色、白色)一起工作。在测试中,我成功地获得了暗绿色、紫色、灰色和各种其他色调(当使用颜色设置颜色时)。FromArgb@krw12572-bmp以橙色背景保存!因此,当从icon.FromHandleGetHicon()中的bmp获取图标时,它必须执行某些操作不做你希望做的事。你试过换颜色吗?橙色和其他颜色,看看它是否是与颜色有关的问题,还是你的逻辑的其他部分?考虑用黄色替换它,因为你知道这在你的<代码> GETCONBBGGROUL> 方法的下游工作。我知道它不是你想要的,但是,W。如果在清除image
    graphics.clear(bgColor);
    后立即保存位图
    myBmp.save(filepath)
    ,则会发生这种情况。请查看保存在filepath的文件是否为橙色。@lordwillmore-是的,它可以与其他颜色一起使用,包括红色、黄色、白色。在测试中,我成功地获得了暗绿色、紫色、灰色和其他各种色调(使用颜色设置颜色时。FromArgb@krw12572-该.bmp以橙色背景保存!因此从图标中的bmp获取图标时,它必须执行某些操作。FromHandleGetHicon()不会执行您希望它执行的操作。