Tôi phải hiển thị một hình ảnh rất lớn (> 50.000 ² pixel) với cairo. Để làm điều này mà không cần hết bộ nhớ, tôi hiển thị các phần của hình ảnh (< 1.000² pixel) cái khác và hợp nhất chúng lại với nhau sau.Hình ảnh lớn với cairo
- Tạo 1000x1000 Surface
- Dịch vị trí của các phần hiện
- ảnh Draw (gọi các hướng dẫn vẽ bằng pycairo)
- Render/Lưu ảnh vào file (cairo_surface_write_to_png)
- Lặp lại với tiếp theo một phần
Vì thuật toán cắt nhanh hơn của chính tôi, bước ba vẽ toàn bộ hình ảnh, ngay cả khi chỉ một phần của nó có thể nhìn thấy được. Hầu hết CPU được sử dụng trong Bước 3 (bằng python). Hầu hết bộ nhớ được sử dụng trong Bước 4 (bởi cairo).
Có cách nào để tăng tốc độ không? Một cái gì đó như thế này?
- Tạo 1000x1000 Surface
- ảnh Draw
- Di chuyển tất cả mọi thứ về vị trí của phần hiện
- Render/Lưu ảnh vào file
- Lặp lại 3 với phần tiếp theo
hoặc
- Tạo 50000x50000 Surface
- ảnh Draw
- Render/Save chỉ là phần hiện tại của ảnh vào file
- Lặp lại 3 với phần tiếp theo
Một ngôn ngữ khác không phải là một tùy chọn và cũng không giải quyết được vấn đề, nhưng write_to_png_stream là một ý tưởng hay. Cảm ơn – defnull
Bạn được chào đón. Tôi hy vọng nó hoạt động. –