winforms CopyFromScreen返回表单后面的任何内容的图像[复制]

uttx8gqw  于 2023-03-19  发布在  其他
关注(0)|答案(2)|浏览(140)

此问题在此处已有答案

Capture screenshot Including Semitransparent windows in .NET(1个答案)
5天前关闭。
我在这里有一个严重的问题。我正在编程一个工具,用户可以在其中设计一个开关柜的控制柜。这个柜是用面板和图片框绘制的,它工作得很好,看起来也很好。
现在我想做一个Export函数,将设计好的Cubicle导出为pdf文件。
到目前为止一切顺利,功能工作-只在我的电脑上!我使用CopyFromScreen来获取显示隔间的面板的屏幕截图,将其保存到文件中并放入pdf文件(我还尝试使用DrawToBitmap获取面板的图片,但这是不能正常工作,因为它是绘制一些图片框超过其他)。在我的电脑上,它正确地捕捉了面板,并在PDF中显示了正确的图片,然而,在每台其他计算机上,它都会拍摄表格背后的内容。这相当令人困惑,因为我不知道它为什么要这样做,为什么它在我的系统上工作。到目前为止,我尝试了一些东西,以迫使窗口在上面,但没有任何工作,每个人都得到的图片桌面或窗口是后面。
代码:

void takeScreenshot()
    {
        this.TopMost = true;
        this.BringToFront();
        this.Focus();
        Application.DoEvents();

        System.Drawing.Rectangle bounds = Mainpanel.Bounds;
        bounds.Width = bounds.Width - 6;
        bounds.Height = bounds.Height - 4;
        using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height))
        {
            using (Graphics g = Graphics.FromImage(bitmap))
            {
                g.CopyFromScreen(Mainpanel.PointToScreen(new Point()).X + 3, Mainpanel.PointToScreen(new Point()).Y + 2, 0, 0, bounds.Size);
            }
            bitmap.Save(Application.StartupPath + "\\data\\programdata\\temppic.bmp");
        }
        this.TopMost = false;
    }

我其实挺绝望的,没有这个导出程序是没用的。
有人知道怎么解决这个问题吗?
乔纳森

at0kjp5o

at0kjp5o1#

使用此代码。

void takeScreenshot()
    {
        Application.DoEvents();
        System.Drawing.Rectangle bounds = Mainpanel.Bounds;
        bounds.Width = bounds.Width - 6;
        bounds.Height = bounds.Height - 4;

        using (Bitmap bitmap = new Bitmap(Mainpanel.Width, Mainpanel.Height))
        {
            Mainpanel.DrawToBitmap(bitmap, new Rectangle(3, 2, bounds.Width, bounds.Height));
            bitmap.Save(Application.StartupPath + "\\data\\programdata\\temppic.bmp");
        }
    }
scyqe7ek

scyqe7ek2#

你可以先把表格淡出,然后拍张照片,再把它淡入,就像这样:

private void captur_Click(System.Object sender, System.EventArgs e)
{
    Opacity = 0;
    // put the code you used to capture the screen
    Opacity = 1;
}

相关问题