2013-01-05 40 views
5

Tôi đang sử dụng PIL để chuyển đổi một phần màn hình theo chiều dọc. Dữ liệu hình ảnh gốc là một bề mặt đồ họa cần được chuyển đổi thành hình ảnh PIL.Làm thế nào để chuyển đổi một bề mặt pygame thành hình ảnh PIL?

Vì vậy, tôi đã tìm thấy hàm chuỗi dây của pygame tồn tại cho mục đích đó.

Tuy nhiên kết quả trông khá lạ (xem ảnh chụp màn hình được đính kèm). Điều gì sẽ xảy ra với mã này:

rImage = pygame.Surface((1024,768)) 

#draw something to the Surface 
sprite = pygame.sprite.RenderPlain((playboard,)) 
sprite.draw(rImage) 

pil_string_image = pygame.image.tostring(rImage, "RGBA",False) 
pil_image = Image.fromstring("RGBA",(660,660),pil_string_image) 

Tôi đang làm gì sai?

pygame surface to pil image conversion

+1

Có vẻ như thế nào nếu bạn đặt (1024,768) thay cho (660,660) hoặc ngược lại? –

+0

Nó hoạt động, nhưng tại sao? – Hedge

+0

[tài liệu pygame] (http://www.pygame.org/docs/ref/image.html#pygame.image.fromstring) về pygame.image.fromstring (string, size, format, flipped = False) nói “The kích thước và định dạng hình ảnh phải tính toán kích thước chính xác giống như bộ đệm chuỗi đã qua. Nếu không thì một ngoại lệ sẽ được nâng lên ”nhưng ngoài ra tôi không biết nó hoạt động như thế nào. –

Trả lời

5

Như tôi đã nói trong một chú thích, pygame documentation cho pygame.image.fromstring(string, size, format, flipped=False) nói “Những hình ảnh kích thước và định dạng phải tính toán kích thước chính xác giống như bộ đệm chuỗi thông qua. Nếu không thì một ngoại lệ sẽ được nâng lên ”. Do đó, việc sử dụng (1024,768) thay cho (660,660), hoặc ngược lại - nói chung, cùng kích thước cho hai cuộc gọi - có nhiều khả năng hoạt động. (Tôi nói "nhiều khả năng làm việc" thay vì "sẽ hoạt động" vì tôi đã không kiểm tra bất kỳ trường hợp nào.)

Lý do nghi ngờ một vấn đề như thế này: Cái nhìn kỳ lạ của một phần của hình ảnh giống như màn hình màn hình được đặt thành tốc độ raster nó không thể đồng bộ hóa; tức là, các dòng của hình ảnh bắt đầu hiển thị tại các điểm khác với lề trái; trong trường hợp này vì độ dài dòng hình ảnh dài hơn độ dài dòng hiển thị. Tôi cho rằng những bông tuyết là những hình nhân, được tạo ra riêng biệt với hình ảnh méo.

Các vấn đề liên quan