C# - 使用高分辨率屏幕截图

时间:2014-05-18 08:31:53

标签: c# image image-processing drawing ocr

我需要在桌面上捕获一个区域。但是我需要这个区域具有非常高的分辨率(例如,至少几千像素的水平像素,相同的垂直像素)。是否有可能获得具有高密度像素的屏幕截图?我怎样才能做到这一点?我尝试使用一些AutoIt脚本捕获屏幕,并获得了一些非常好的结果(350MB大的图像),现在我想用C#做同样的事情。

修改

我正在读取/写入这样的.tif文件,它已经丢失了大部分数据:

using (Bitmap bitmap = (Bitmap)Image.FromFile(@"ScreenShot.tif")) //this file has 350MB
{
    using (Bitmap newBitmap = new Bitmap(bitmap))
    {
        newBitmap.Save("TESTRES.TIF", ImageFormat.Tiff); //now this file has about 60MB, Why?
    }
}

我试图捕捉我的屏幕,但我能从中获得的最好的是几兆字节(远不及350MB):

using (var bmpScreenCapture = new Bitmap(window[2], window[3], PixelFormat.Format32bppArgb))
{
    using (var i = Graphics.FromImage(bmpScreenCapture))
    {
        i.InterpolationMode = InterpolationMode.High;

        i.CopyFromScreen(window[0], window[1], 0, 0, bmpScreenCapture.Size, CopyPixelOperation.SourceCopy);
    }
    bmpScreenCapture.Save("test2.tif", ImageFormat.Tiff);
}

1 个答案:

答案 0 :(得分:1)

您无法收集比来源更多的信息。

这是一个基本的事实,它也适用于此。 因此,您无法在其颜色深度捕获更多的1920x1080像素。

OTOH,既然您想将捕获的图像提供给OCR,还有一些事情需要考虑,事实上还要做。

如果您通过优化图像来帮助它,OCR会非常高兴。这应该涉及

  • 减少颜色并增加对比度
  • 扩大到建议的dpi分辨率
  • 添加更多对比度

有趣的是,这将有助于OCR,尽管真实信息不能超过原始来源。但是一个好的调整大小算法会添加发明的数据,这些通常就是OCR软件所需要的。

将图像存储到pngtif而不是jpg等文件时,您还应注意使用良好的非损耗格式。

最好的方法是通过反复试验来调整,直到OCR结果足够好。

提示:由于字体抗锯齿,屏幕截图上的大多数文字都被彩色像素的光环所包围。通过减少甚至消除饱和来摆脱它是一种方式;也许你想在你的显示属性中关闭它? (查看ClearType!)