[英]Want to capture screen shot of minimize window
i am working with MDI application. 我正在使用MDI应用程序。 before minimize any sdi form i want to capture it's screen shot without title bar.my code is working but the way i am capturing image that is not clear rather bit obscure.
在最小化任何sdi形式之前,我想捕获没有标题栏的屏幕快照。我的代码正在工作,但是我捕获的图像不清楚但有点晦涩。 this way i do it.
这样我做到了。 here is my code.
这是我的代码。
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_COMMAND && m.WParam.ToInt32() == SC_MINIMIZE)
{
OnMinimize(EventArgs.Empty);
}
base.WndProc(ref m);
}
protected virtual void OnMinimize(EventArgs e)
{
if (_lastSnapshot == null)
{
_lastSnapshot = new Bitmap(100, 100);
}
using (Image windowImage = new Bitmap(ClientRectangle.Width, ClientRectangle.Height))
using (Graphics windowGraphics = Graphics.FromImage(windowImage))
using (Graphics tipGraphics = Graphics.FromImage(_lastSnapshot))
{
Rectangle r = this.RectangleToScreen(ClientRectangle);
windowGraphics.CopyFromScreen(new Point(r.Left, r.Top), Point.Empty, new Size(r.Width, r.Height));
windowGraphics.Flush();
float scaleX = 1;
float scaleY = 1;
if (ClientRectangle.Width > ClientRectangle.Height)
{
scaleY = (float)ClientRectangle.Height / ClientRectangle.Width;
}
else if (ClientRectangle.Height > ClientRectangle.Width)
{
scaleX = (float)ClientRectangle.Width / ClientRectangle.Height;
}
tipGraphics.DrawImage(windowImage, 0, 0, 100 * scaleX, 100 * scaleY);
}
}
so guide me how should i get the snap of the sdi form which will be better clear and prominent. 因此,指导我如何获取sdi表格,使其更加清晰和突出。 any idea.
任何想法。 thanks.
谢谢。
You scale the picture and any scaling - no matter of up or down-scaling - will lead to a lower quality image. 您缩放图片,任何缩放-无论是放大还是缩小-都会导致图像质量降低。 Instead of scaling the image I would get the width and height of the window, create a new bitmap with that size and finally draw the image with the same size as well.
除了缩放图像外,我还可以获取窗口的宽度和高度,使用该尺寸创建一个新的位图,并最终以相同的尺寸绘制图像。
protected virtual void OnMinimize(EventArgs e)
{
Rectangle r = this.RectangleToScreen(ClientRectangle);
if (_lastSnapshot == null)
{
_lastSnapshot = new Bitmap(r.Width, r.Height);
}
using (Image windowImage = new Bitmap(r.Width, r.Height))
using (Graphics windowGraphics = Graphics.FromImage(windowImage))
using (Graphics tipGraphics = Graphics.FromImage(_lastSnapshot))
{
windowGraphics.CopyFromScreen(new Point(r.Left, r.Top), new Point(0, 0), new Size(r.Width, r.Height));
windowGraphics.Flush();
tipGraphics.DrawImage(windowImage, 0, 0, r.Width, r.Height);
}
}
or something close to the above - I have not actually been able to test it. 或接近上面的内容-我实际上无法测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.