需要帮助改变ImageList中的位图以将黑色像素切换为黄色,它们被用作UICommandBar的图像(截图和下面的尝试)
执行代码,使用GetPixel条件,然后使用SetPixel,但图像不会更改。可能与ImageListStreamer有关,或者没有时间交换这些像素。
rtfeditor.cs
this.imageList1.ImageStream = ( (System.Windows.Forms.ImageListStreamer)(resources.GetObject( "imageList1.ImageStream" ) ) );
this.imageList1 = ColorSpace.ProcessHighContrast(this.imageList1);
的Utils \ ColorSpace.cs
public static System.Windows.Forms.ImageList ProcessHighContrast(System.Windows.Forms.ImageList imageList)
{
if (System.Windows.Forms.SystemInformation.HighContrast)
{
foreach (System.Drawing.Bitmap imageListImage in imageList.Images)
{
for (int i = 0; i < imageListImage.Width; i++)
{
for (int j = 0; j < imageListImage.Height; j++)
{
Color color = imageListImage.GetPixel(i, j);
if (System.Drawing.Color.FromArgb(255, 0, 0, 0).Equals(color))
imageListImage.SetPixel(i, j, System.Drawing.SystemColors.WindowText);
}
}
}
}
return imageList;
}
答案 0 :(得分:0)
Hans Passant的评论对于解决此问题至关重要(请参阅下面引用的评论)+更改ProcessHighContrast(现在是第一个)的调用顺序,并将ImageList分配给Janus.Windows。 UI.CommandBars.UICommandBar(现为第二个)。下面的新方法和调用代码。
ImageList.Images返回每个图像的副本。因此,改变副本根本不会修改ImageList内容。改为创建一个新的ImageList。请注意Darth Vader配色方案往往只受程序员的欢迎,普通用户希望高对比度版本具有白色背景。这将不那么痛苦。 - 汉斯帕斯特
rtfeditor.cs
this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
this.imageList1 = ColorSpace.ProcessHighContrast(this.imageList1);
this.uiCommandManager1.ImageList = this.imageList1;
的Utils \ ColorSpace.cs
public static System.Windows.Forms.ImageList ProcessHighContrast(System.Windows.Forms.ImageList imageList)
{
if (System.Windows.Forms.SystemInformation.HighContrast)
{
System.Windows.Forms.ImageList imageListNew = new ImageList();
foreach (System.Drawing.Bitmap imageListImage in imageList.Images)
{
for (int i = 0; i < imageListImage.Width; i++)
{
for (int j = 0; j < imageListImage.Height; j++)
{
Color color = imageListImage.GetPixel(i, j);
if (System.Drawing.Color.FromArgb(255, 0, 0, 0).Equals(color))
imageListImage.SetPixel(i, j, System.Drawing.SystemColors.WindowText);
}
}
imageListNew.Images.Add(imageListImage);
}
return imageListNew;
}
return imageList;
}