反转(否定)Form C的所有颜色#

时间:2012-03-16 07:57:41

标签: c# colors

我有一个GUI应用程序,它有很多颜色,如绿色,红色,白色,棕色 - 所有这些都在黑色背景上。

我想为此应用添加屏幕截图按钮。我编写了它(并且它工作正常)但我必须向用户提供关于截取屏幕截图的视觉指示(不是任何MessageBox)。

我能想到的最好的方法之一就是暂时将所有颜色反转并恢复正常(如Adobe Reader中的快照)。

任何人都可以帮我吗?

或者您认为可以确认屏幕截图的任何其他想法。

甚至你能告诉我如何“重画”整个窗口吗?

我需要一条线索,我可以从中开始探索! :(

提前致谢!

更新:作为Temp soultion,即使是Capture按钮,我也这样做了: -

   this.BackColor = Color.White;  // My Original BackColor is Black
   Update();
   Refresh();
   Thread.Sleep(250);  // I don't want responsive UI... It's like Still Picture frame. :)
   this.BackColor = Color.Black;  // Back to Normal
   Update();
   Refresh();

1 个答案:

答案 0 :(得分:4)

我的项目中有类似的任务,但我想在连接丢失时使我的应用程序GUI灰度。 我想建议你三个步骤:

  1. 截取您的应用程序的屏幕截图
  2. 颠倒它
  3. 在窗口上以透明推子形式显示此屏幕截图。
  4. 每个步骤的一些操作方法:

    1. 截屏(代码应放在主窗口内):

      Point lefttopinscreencoords = this.PointToScreen(new System.Drawing.Point(0, 0));
      Bitmap bg = new Bitmap(this.Width, this.Height);
      this.DrawToBitmap(bg, new Rectangle(0, 0, bg.Width, bg.Height));
      
    2. 转换图像(此处转换为灰度):

      ColorMatrix cm = new ColorMatrix(new float[][]
                                                  {
                                                      new float[] {0.3f, 0.3f, 0.3f, 0, 0},
                                                      new float[] {0.59f, 0.59f, 0.59f, 0, 0},
                                                      new float[] {0.11f, 0.11f, 0.11f, 0, 0},
                                                      new float[] {0, 0, 0, 1, 0, 0},
                                                      new float[] {0, 0, 0, 0, 1, 0},
                                                      new float[] {0, 0, 0, 0, 0, 1}
                                                  });
      Bitmap BogusBackground = new Bitmap(this.Width, this.Height);
      ImageAttributes imageAttributes = new ImageAttributes();
      imageAttributes.SetColorMatrix(cm);
      Graphics g = Graphics.FromImage(BogusBackground);
      g.DrawImage(bg, new Rectangle(0, 0, BogusBackground.Width, BogusBackground.Height),
                  0,0,
                  bg.Width,
                  bg.Height,
                  GraphicsUnit.Pixel, imageAttributes);
      g.Dispose();
      
    3. 您可以在此处找到优秀的表单推子:http://www.codeproject.com/KB/cs/notanotherformfader.aspx?msg=1980689。现在,如果您创建一个名为SplashForm的派生表单(来自FormFader),您可以执行以下操作:

      SplashForm sp = new SplashForm();
      sp.BackgroundImage = BogusBackground;
      sp.BackgroundImageLayout = ImageLayout.Stretch;
      sp.FadeOnLoad = false;
      sp.FadeOnClose = true;
      sp.FadeOpacity = 1;
      sp.Location = this.Location;
      sp.Height = this.Height;
      sp.Width = this.Width;
      sp.StartPosition = FormStartPosition.Manual;
      sp.Show();
      sp.Close();