我有一个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();
答案 0 :(得分:4)
我的项目中有类似的任务,但我想在连接丢失时使我的应用程序GUI灰度。 我想建议你三个步骤:
每个步骤的一些操作方法:
截屏(代码应放在主窗口内):
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));
转换图像(此处转换为灰度):
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();
您可以在此处找到优秀的表单推子: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();