【发布时间】:2011-10-03 00:16:18
【问题描述】:
我用 pygame、imageGrab 和套接字创建了一个程序,但它不起作用。它应该使用 ImageGrab 获取服务器的打印屏幕,将其转换为字符串,然后将其发送到客户端。但是,客户端在收到信息并将其转换为图像时会引发错误:
image = pygame.image.frombuffer(img, (800,600), "RGB")
ValueError: Buffer length does not equal format and resolution size
代码服务器
import sys, os, socket, pygame
from PIL import ImageGrab
from pygame.locals import *
print "streaming sever 0.1"
try:
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error:
print "Error creating socket"
sys.exit(1)
host = "127.0.0.1"
port = raw_input("Port:")
socket.bind((host, int(port)))
socket.listen(2)
socket2,client = socket.accept()
print "Client conectado: " + str(client[0]) + "\nPorta usada: " + str(client[1])
#Capture and send
while True:
img=ImageGrab.grab().resize((800,600))
img.tostring()
socket2.sendall(img)
socket2.close()
代码客户端
import sys, os, socket, pygame
from PIL import ImageGrab
from pygame.locals import *
print "streaming client 0.1"
pygame.init()
try:
s_client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print "streaming protocol started"
except socket.error:
print "Error creating socket"
sys.exit(1)
host = "127.0.0.1"
porta = raw_input("Port:")
q_bytes = raw_input("Enter the number of MBs to transfer: ")
t_bytes = 1024*1024*int(q_bytes)
try:
s_client.connect((host,int(porta)))
except socket.error:
print "Error connecting to: " + host
sys.exit(1)
print "Conectado!"
size = width, height = 800, 600
screen = pygame.display.set_mode(size)
num = 0
while True:
img = s_client.recv(t_bytes)
image = pygame.image.frombuffer(img, (800,600), "RGB")
screen.blit(image,(0,0))
pygame.display.flip()
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
os._exit(1)
#recebimento
s_client.close()
【问题讨论】:
-
致寻找 ImageGrab 的其他人;显然它只是 Windows。
-
docs.python.org/howto/sockets.html#using-a-socket 显然曾经有葡萄牙语翻译,但现在链接已断开。
-
thomas 我修改了代码以接收小图像,并在硬件问题上给出了相同的错误,您可以更好地解释可能发生的事情,就像两个的力量一样,您可以向我解释我做什么这个错误核心?谢谢,布鲁诺·特里波洛尼