1:首先,怎样获得手机屏幕,有2种方式,一种是直接使用adb shell screencap -p获取,这个优点是简单,方便,但速度不够快,另外一个方式,通过Android 隐藏的API surface来实现,优点是:截图只需要十几ms,但需要在手机上写apk。
抓图实现如下:(以window 系统为例)
def updatePic(mainWindow):
while True:
os.system('adb wait-for-device')
#截图保存到手机sdcard 的pic 目录下。
cmd='adb shell screencap -p /sdcard/pic/temp_a.png '
subprocess.Popen(cmd,stdout=subprocess.PIPE,shell=True).wait()
cmdpic="adb pull /sdcard/pic/temp_a.png F:\\android\\new_test "
# 把截图拖到PC上。
subprocess.Popen(cmdpic,stdout=subprocess.PIPE,shell=True).wait()
# 截图完成后,让窗口刷新截图。
mainWindow.mySignal.emit('temp_a.png')
完整的其他部分如下:
from PySide.QtGui import *
import sys,os
from PySide.QtCore import *
#定义:class MyView
class MyView(QGraphicsView):
mySignal = Signal(str)
def __init__(self):
QGraphicsView.__init__(self)
self.myScene = QGraphicsScene(self)
self.setScene(self.myScene)
self.pixmap=QPixmap()
self.pixmap.load("temp_a.png")
self.pixmap=self.pixmap.scaled(400, 500, Qt.KeepAspectRatio)
self.myScene.addPixmap(self.pixmap)
# 通过mySignal把addpixmap 与UpdatePic1 链接起来。实现自动刷新图片
self.mySignal.connect(self.UpdatePic1)
def UpdatePic1(self, text):
self.pixmap.load(text)
self.pixmap=self.pixmap.scaled(400, 500, Qt.KeepAspectRatio)
self.myScene.addPixmap(self.pixmap)
if __name__=='__main__':
app=QApplication(sys.argv)
mainWindow=MyView()
mainWindow.show()
t=threading.Thread(target=updatePic,args=(mainWindow,))
t.start()
sys.exit(app.exec_())