Frage

Ich habe eine RCP-Anwendung von Eclipse, die eine Menge zeigt (10k +) die kleinen Bilder nebeneinander, wie ein Filmstreifen. Für jedes Bild verwende ich ein SWT Image Objekt. Dieser verwendet eine übermäßige Menge an Speicher und Ressourcen. Ich bin für eine effizientere Art und Weise. Dachte ich an alle diesen Bildern zu nehmen und sie durch Verketten einer ImageData Aufgabe der richtigen Gesamt Erstellen verketteten Breite (bei konstanter Höhe) und unter Verwendung von setPixel() für den Rest der Pixel. Allerdings verwendet die Palette im ImageData Konstruktor kann ich nicht herausfinden.

Ich suchte auch für SWT Fliesen oder Mosaik-Funktionalität ein Bild von einer Gruppe von Bildern zu erstellen, aber nichts gefunden.

Irgendwelche Ideen, wie ich effizient Tausende von kleinen Bildern nebeneinander angezeigt werden kann? Bitte beachten Sie, dass, sobald die Bilder angezeigt werden, sie nicht manipuliert werden, so ist dies ein einmalig Kosten.

War es hilfreich?

Lösung

Sie können zeichnen direkt auf dem GC (Grafikkontext) eines neuen (groß) Bild. ein großes Image in viel weniger Ressourcenverbrauch zur Folge haben soll, als Tausende von kleineren Bildern (jedes Bild in SWT hält einige OS Grafikobjekt handelt)

Was können Sie versuchen, ist so etwas wie folgt aus:

        final List<Image> images;
        final Image bigImage = new Image(Display.getCurrent(), combinedWidth, height);
        final GC gc = new GC(bigImage);
        //loop thru all the images while increasing x as necessary:
        int x = 0;
        int y = 0;
        for (Image curImage : images) {
            gc.drawImage(curImage, x, y);
            x += curImage.getBounds().width;
        }
        //very important to dispose GC!!!
                    gc.dispose();
        //now you can use bigImage

Andere Tipps

Vermutlich nicht jedes Bild auf dem Bildschirm zu jeder Zeit sichtbar? Vielleicht eine bessere Lösung wäre, nur die Bilder geladen werden, wenn sie sich (oder sind dabei, werden) sichtbar, diese können entsorgt werden, wenn sie den Bildschirm gescrollt wurden. Natürlich mögen Sie habe gerne ein paar im Speicher zu halten, die auf beiden Seiten des aktuellen Ansichtsfensters, um einen reibungslosen Übergang für den Benutzer zu machen.

Ich war zuvor mit einer Java-Anwendung Photomosaike zu erstellen, und fand es sehr schwierig, eine angemessene Leistung und Speichernutzung mit dem Java-Imaging (JAI) Bibliotheken und SWT zu erreichen. Obwohl wir nicht annähernd so viele Bilder verwendet haben, wie Sie erwähnen, war ein Weg außerhalb von Java auf einem Versorger zu verlassen. Insbesondere könnten Sie ImageMagick Befehlszeilen-Dienstprogramme verwenden, um zusammenheften Ihr Mosaik, und die Last der fertiggestellte Speicher von der Festplatte. Wenn Sie Lust bekommen wollen, gibt es auch eine C ++ API für ImageMagick, die im Speicher sehr effizient ist.

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