2009-03-05 5 views
5

카이로로 매우 큰 이미지 (> 50.0002 픽셀 이상)를 렌더링해야합니다. 메모리가 부족한 상태에서이 작업을 수행하기 위해 이미지의 일부 (< 1.0002 픽셀)를 하나씩 차례로 렌더링하고 나중에 병합합니다.카이로로 찍은 큰 이미지

  1. 만들기 1000x1000 표면
  2. 현재 부분의 위치를 ​​번역
  3. 그리기 이미지 (pycairo를 사용하여 드로잉 명령을 호출)
  4. 렌더링/저장 이미지 파일로 (cairo_surface_write_to_png) 다음과
  5. 반복 부분

카이로 클리핑 알고리즘이 내 자신보다 빠르기 때문에 3 단계는 전체 이미지를 그립니다. 그 중 일부만 보입니다. 대부분의 CPU는 3 단계에서 사용됩니다 (파이썬으로). 대부분의 메모리는 4 단계 (카이로)에서 사용됩니다.

속도를 높이는 방법이 있습니까? 이 같은?

  1. 만들기 1000x1000 표면
  2. 이/저장 이미지가
  3. 반복 3 다음 부분으로 파일에 현재 렌더링 부분
  4. 의 위치로 모든 이동
  5. 그리기 이미지

또는

  1. 50000x50000 표면을 만들기
  2. 그리기 이미지
  3. /저장을 제기 할 이미지의 현재 부분을 렌더링
  4. 다음 부분 모두의

답변

2

첫째, 대신 파이썬 사용하여 C 또는 발라와 반복 3 것 아마도 속도가 빨라질 것입니다.

메모리 사용에 관해서는 파일이 아닌 내 스트림에 쓰기를 시도합니다 (write_to_png_stream 참조). 이 일 수 있습니다. 카이로는 모든 일이 끝난 후 한 번만 함수를 호출하지 않는다고 가정하고 (이 시도하지 않았습니다.) 컨트롤 메모리 사용을 허용합니다.

+0

다른 언어는 옵션이 아니 어서 문제를 해결할 수 없지만 write_to_png_stream은 좋은 아이디어입니다. 감사합니다 – defnull

+0

당신은 오신 것을 환영합니다. 나는 그것이 효과가 있기를 바란다. –

관련 문제