Frage

Ich habe ein sehr großes Bild (> 50.000² Pixel) mit kairo zu machen. Um dies zu tun, ohne Running Out of Memory I Teile des Bildes machen (<1.000² Pixel) eines nach dem anderen auf und verschmelzen sie später zusammen.

  1. Erstellen 1000x1000 Oberfläche
  2. Übersetzen in die Position des aktuellen Teils
  3. Zeichnen Bild (Aufruf der Zeichenanweisungen mit pycairo)
  4. Render / Save Bild in einer Datei (cairo_surface_write_to_png)
  5. Wiederholen Sie mit dem nächsten Teil

Da Cairos Clipping-Algorithmen ist schneller als meine eigenen, Schritt drei zieht das ganze Bild, auch wenn nur ein Teil davon sichtbar ist. Die meisten der CPU wird in Schritt 3 (durch Python) verwendet. Der größte Teil des Speichers wird in Schritt 4 (von kairo) verwendet wird.

Gibt es eine Möglichkeit, Dinge zu beschleunigen? So etwas wie das?

  1. Erstellen 1000x1000 Oberfläche
  2. Zeichnen Bild
  3. Bewegen Sie alles zur Position des aktuellen Teils
  4. Render / Save Bild in Datei
  5. Wiederholen 3 mit dem nächsten Teil

oder

  1. Erstellen 50000x50000 Oberfläche
  2. Zeichnen Bild
  3. Render / speichern nur den aktuellen Teil des Bildes in Datei
  4. Wiederholen 3 mit dem nächsten Teil
War es hilfreich?

Lösung

Zu allererst mit C oder Vala statt Python wird wahrscheinlich die Dinge beschleunigen.

Wie für die Speichernutzung, würde ich meinen eigenen Strom versuchen zu schreiben, anstatt eine Datei (siehe write_to_png_stream ). Dieser könnte können Sie steuern, Speichernutzung (ich diese versuchen), unter der Annahme, Kairo Ihre Funktion nach getan alles nur einmal nicht nennen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top