我需要在桌面上捕获一个区域。但是我需要这个区域具有非常高的分辨率(例如,至少几千像素的水平像素,相同的垂直像素)。是否有可能获得具有高密度像素的屏幕截图?我怎样才能做到这一点?我尝试使用一些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);
}
答案 0 :(得分:1)
您无法收集比来源更多的信息。
这是一个基本的事实,它也适用于此。 因此,您无法在其颜色深度捕获更多的1920x1080像素。
OTOH,既然您想将捕获的图像提供给OCR,还有一些事情需要考虑,事实上还要做。
如果您通过优化图像来帮助它,OCR会非常高兴。这应该涉及
有趣的是,这将有助于OCR,尽管真实信息不能超过原始来源。但是一个好的调整大小算法会添加发明的数据,这些通常就是OCR软件所需要的。
将图像存储到png
或tif
而不是jpg
等文件时,您还应注意使用良好的非损耗格式。
最好的方法是通过反复试验来调整,直到OCR结果足够好。
提示:由于字体抗锯齿,屏幕截图上的大多数文字都被彩色像素的光环所包围。通过减少甚至消除饱和来摆脱它是一种方式;也许你想在你的显示属性中关闭它? (查看ClearType
!)