我使用以下代码截取屏幕截图:
var rc = SystemInformation.VirtualScreen;
Bitmap bmp = new Bitmap(rc.Width, rc.Height);
Graphics g = Graphics.FromImage(bmp);
g.CopyFromScreen(rc.Left, rc.Top, 0, 0, bmp.Size, CopyPixelOperation.SourceCopy);
Run Code Online (Sandbox Code Playgroud)
现在这种方法非常有效并且很容易使用,但是我总是在一些屏幕截图中遇到小的"白点".当图像大量出现时,这可能非常烦人并使图像失真.
我设法缩小了问题的范围,当我尝试截取以下图片的屏幕截图时,会发生错误:

屏幕截图的输出如下所示:

你怎么解决这个问题?出于好奇,这是如何解释的?
在我的测试环境中,屏幕截图根本没有保存.我直接使用它与以下代码:
pictureBox1.Image = bmp;
Run Code Online (Sandbox Code Playgroud)
tl; dr我试图截取屏幕截图,一些像素被白色替换并扭曲结果.
非常感谢你提前.
编辑:事实证明,位图使区域透明(白色来自表单的背景颜色,感谢发现这个消费者!)

但显然你可以在第一张照片中清楚地看到; 我不是想捕捉任何透明的内容.为什么这样做?
EDIT2:
这是我用来选择我的截图的全班:
public partial class SnippingTool : Form
{
public static Image Snip()
{
var rc = SystemInformation.VirtualScreen;
Bitmap bmp = new Bitmap(rc.Width, rc.Height);
Graphics g = Graphics.FromImage(bmp);
g.CopyFromScreen(rc.Left, rc.Top, 0, 0, bmp.Size, CopyPixelOperation.SourceCopy);
var snipper = new SnippingTool(bmp);
if (snipper.ShowDialog() == DialogResult.OK)
{
return …Run Code Online (Sandbox Code Playgroud)