Ich arbeite an einem Silverlight-Projekt, bei dem Benutzer ihre eigenen Collagen erstellen können.Wie Bilder angezeigt werden, ohne riesige Mengen an RAM zu belegen
Das Problem
Wenn mithilfe der Bitmap Klasse, Silverlight Schweine bis große unvernünftig Mengen an RAM ein paar Bilder zu laden. 150 Bilder, bei denen einzelne maximal 4,5 MB auffüllen, nehmen etwa 1,6 GB RAM in Anspruch, was zu Speicherausnahmen führt.
Ich lade sie durch Streams, da der Benutzer ihre eigenen Fotos auswählt.
Was ich suche
Eine Klasse, Methode oder ein Verfahren der riesige Menge an RAM wird zu beseitigen gesaugt. Geschwindigkeit ist ein Problem, deshalb möchte ich nicht zwischen Bildformaten oder ähnlichem konvertieren. Eine schnelle Größenänderungslösung könnte funktionieren.
Ich habe versucht, eine WriteableBitmap zu verwenden, um die Bilder zu rendern, aber ich finde diese Methode zwingt mich, das Rad neu zu erfinden, wenn es Drag/Drop und andere Dinge, die Benutzer mit den Bildern tun soll.
Also ... wollen Sie eine effiziente Lösung, aber Sie wollen keine Methoden verwenden, die die Effizienz verbessern, d. H. Mit den Bildern auf einer niedrigeren Ebene arbeiten? Warum nicht? Ich kenne Silverlight nicht und hoffe, dass Sie eine Lösung finden, aber manchmal müssen Sie tatsächlich die Ärmel hochkrempeln und ein wenig arbeiten. –
Das Problem ist nur die Speichereffizienz. Ich brauche kein schnelles Rendering oder schnelle Modifikation der Bilddaten selbst - ich muss einfach nur die tatsächlichen JPEG-Daten im Speicher verwenden, um sie darzustellen und später in einer PDF zu kombinieren. Das PDF-Framework, das ich verwende, erfordert, dass ich Ströme von JPEG-Daten einwerfe, aber ich sehe keinen guten Weg, um ein BitmapImage in einen JPEG-Stream zu bekommen. –
Können Sie Code hinzufügen, wie Ihr Programm funktioniert und wie groß sind Ihre Bilder allgemein? Wie viele werden Sie gleichzeitig anzeigen? –