C#-屏幕截图质量比正常情况差

我正在尝试捕获屏幕的一部分.
问题是,即使我使用png保存图像,其质量仍然比仅使用普通打印屏幕还要差.

这是我使用的代码:

        //display a save file dialog for the user to set the file name
        SaveFileDialog saveFileDialog = new SaveFileDialog();

        saveFileDialog.Filter = "PNG (*.png)|*.png";
        saveFileDialog.FilterIndex = 0;
        saveFileDialog.RestoreDirectory = true;

        //if the user proceed saving the picture
        if (saveFileDialog.ShowDialog() == DialogResult.OK)
        {
            //simplify code with constant numbers for demo

            //get the width of the panel we need the screenshoot off
            int x = 10;
            //get the height of the panel we need the screenshoot off
            int y = 10;
            //create the ractangle of the screenshoot panel
            Rectangle rect = new Rectangle(x, y, 5, 5);
            //create new bitmap
            Bitmap bmp = new Bitmap(rect.Width, rect.Height, PixelFormat.Format32bppArgb);
            Graphics g = Graphics.FromImage(bmp);

            //get the screenshoot of the panel
            g.CopyFromScreen(rect.Left, rect.Top, 0, 0, bmp.Size, CopyPixelOperation.SourceCopy);

            string fileName = saveFileDialog.FileName;
            if (!fileName.Contains(".png"))
                fileName += ".png";

            bmp.Save(fileName, ImageFormat.Png);
        }

编辑:

我使用代码示例图像形式:

普通屏幕截图:

在这里看起来并没有什么不同,但这是最糟糕的.

解决方法:

您问题中的顶部图像已重新缩放,小于原始图像.这在包含精细细节的图像中很明显,例如用于使文本更具可读性的ClearType抗锯齿像素.重新缩放比例后,视觉效果会受到破坏,文本看起来会更糟.

完全不清楚为什么要重新缩放图像,代码中没有任何内容会导致这种情况.通过使用调试器检查bmp.Horizo​​ntalResolution属性进行仔细检查,该属性应与您的视频适配器的DPI相匹配.最简单的解释是它是由您使用的任何图像查看程序完成的,也许是为了使图像适合窗口.尝试缩小.

上一篇:C#中的click和doubleclick事件不起作用


下一篇:c#-Properties.Settings.Default.Save();不保存在用户计算机上