2009-03-05 26 views
5

Çok büyük bir görüntü (> 50.000² piksel) cairo ile render etmeliyim. Hafızamız bitmeden bunu yapmak için görüntünün (< 1.000² piksel) parçalarını birbiri ardına işledim ve daha sonra bir araya getiriyorum.cairo ile büyük resimler

  1. oluştur 1000x1000 Yüzey
  2. akım kısmının pozisyonuna Çevir
  3. Kurası resmi (pycairo kullanarak çizim talimatlarını çağırarak)
  4. Render/Kaydet görüntü dosyasına (cairo_surface_write_to_png) aşağıdaki ile
  5. tekrarlayın bölüm

Cairos kırpma algoritmaları kendiminkinden daha hızlı olduğu için, üçüncü adım tüm görüntüyü çizer. sadece bir kısmı görülebilir. CPU'nun çoğu 3. Adımda (python ile) kullanılır. Belleğin çoğu Adım 4'te (cairo tarafından) kullanılır.

İşleri hızlandırmak için bir yol var mı? Böyle bir şey mi?

  1. oluştur 1000x1000 Yüzey
  2. /Kaydet görüntü
  3. tekrarlayın 3 sonraki bölümü ile dosyaya Render akım parçası
  4. pozisyonuna şeyi Taşı
  5. Kurası görüntü

veya

  1. 50000x50000 Yüzey oluşturma
  2. Kurası görüntü
  3. /Kaydet dosyaya görüntünün yalnızca geçerli kısmını Render
  4. sonraki bölümünde tüm

cevap

2

Birincisi, yerine Python kullanarak C veya Vala ile tekrarlayın 3 olacak Muhtemelen işleri hızlandırır.

Bellek kullanımıyla ilgili olarak, bir dosya yerine kendi akışımma yazmayı deneyebilirim (bkz. write_to_png_stream). Bu ,'un (bunu denemedim) kontrol hafızasını kullanmasına izin verebilir, Kahire'nin işlevinizi yalnızca her şey bittikten sonra bir kez çağırmayacağını varsayarak.

+0

Başka bir dil bir seçenek değildir ve sorunu çözmez, ancak write_to_png_stream iyi bir fikirdir. Teşekkürler – defnull

+0

Rica ederim. Umarım işe yarar. –

İlgili konular