为什么ImageGrab.grab无法捕获整个屏幕?

时间:2018-03-14 00:44:15

标签: python python-imaging-library screenshot

我试图使用PIL.ImageGrab.grab()捕获我的屏幕图像。 这是我的问题 - 当我使用下面的代码时,img只是我屏幕的左上角。

from PIL import ImageGrab
img = ImageGrab.grab()

使用win32api.GetSystemMetrics()查找我的屏幕尺寸。

> GetSystemMetrics(0)
Out[6]: 1280

> GetSystemMetrics(1)
Out[7]: 720

然后我使用ImageGrab.grab((0,0,1280,720)),仍然在屏幕的左上角!绝望地,我打电话给ImageGrab.grab((0,0,1400,900)),输出是相同的部分图像,右下方有一个黑框......

我不知道发生了什么。似乎其他人只需拨打ImageGrab.grab()即可捕获他们的屏幕。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

当我尝试按照本教程https://code.tutsplus.com/tutorials/how-to-build-a-python-bot-that-can-play-web-games--active-11117时,我在PIL上遇到了同样的问题。

要解决此问题,

- > 转到Python安装的目录并右键单击python.exe

- > 属性 - > 兼容性选项卡 - > 选中“在高DPI设置下禁用显示缩放”。

对pythonw.exe重复相同的步骤。希望你的问题得到解决请告诉我。

答案 1 :(得分:0)

josh pointed out<code> 2019-03-02 17:25:37.140 28705-28705/com.sarkerjr.greenBlood E/AndroidRuntime: FATAL EXCEPTION: main Process: com.sarkerjr.greenBlood, PID: 28705 android.content.res.Resources$NotFoundException: String resource ID #0x2 at android.content.res.Resources.getText(Resources.java:339) at android.content.res.Resources.getString(Resources.java:433) at android.content.Context.getString(Context.java:556) at com.sarkerjr.greenBlood.MainActivity.displayDatabaseInfo(MainActivity.java:121) at com.sarkerjr.greenBlood.MainActivity.access$000(MainActivity.java:21) at com.sarkerjr.greenBlood.MainActivity$2.onClick(MainActivity.java:56) at android.view.View.performClick(View.java:6294) at android.view.View$PerformClick.run(View.java:24770) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) </code>

There is a working workaround for this without fiddling with the OS settings. The solution is to use the following to make your program DPI aware on Windows:

josh