Announcement

Collapse
No announcement yet.

Thumbnails: Zahl der Bilder in ImageList?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Thumbnails: Zahl der Bilder in ImageList?

    Hallo,<br>

    es ist immer wieder was dazwischen gekommen, aber jetzt kann ich mich wieder damit beschäftigen.

    Meine Thumbnails per ListView und Imagelist funktionieren ja sehr schön, vor allem schön schnell.
    Aber isch schaffe es nur, ca. 440 Bilder anzuzeigen. In der von mir eingestellten Größe kriege<br>
    ich nicht mehr in die ImageList rein.<br>
    Das ist viel zu wenig! Ein paar tausend sollten es schon sein. <br>
    Der Explorer macht es in der Ansicht "Große Iconen" für eine Ordner ja vor.<br>
    Da konnte ich bisher noch keine Grenzen feststellen.<br>

    Wie geht das? Könnt ihr mir da einen Tipp geben?<br>

    Gruß<br>
    Matthias

  • #2
    Du musst mehrere ImageListen verwenden. Dies kann auch der Explorer nicht besser und nutzt den ShellIconCache bestehend aus mehreren Image Listen.
    Ein andere Möglichkeit wäre Zwischenzuspeichern. Angenomen alle Deine Thumbnails besitzen die gleiche Größe und die Anzahl der möglichen Thumbnails per Image List ist fest vorgegeben. Bei einer vorgegebenen Farbtiefe müsste dann das Bitmap der IMageList immer gleich groß sein. Du erzeugst nun ein File, füllst die Image List mit den Thumbnails bis sie voll ist. Dann speicherst Du das IMageList Bitmap in dieses File und beginnst von vorn die ImageList mit den nächsten Thumbnails zu füllen usw. usw. Beim Anzeigen/Laden der Thumbnails kann dann die jeweilige Bitmap (Ausschnitt) nachgeladen werden.
    Noch besser fände ich generell nur eine ImageList mit den aktuellen Ausschnitt aller eingescannten Bilddateien zu füllen. D.h. Du scannst alle Ordner und speicherst nur den FileNamen zwischen falls es ein Bild ist. Dann öffnest und erzeugst die Thumbnails nur für alle aktuellen Dateien, sozuagen nur ein Ausschnitt aller gefundenen Files. Das Nachladen/Erzeugen der Thumbnails geschiet dann z.B. Threadbasiert und live direkt aus der Datei. Vorteil bei der Sache ist das es wesentlich schneller ist, das man aus den Bildern sehr schnell zusätzliche Infos extrahieren kann (Copyright/Autho usw) und dann darüber filtern könnte. Auch die Anzeigesortierung ließe sich ändern usw. usw.

    Hage

    Comment


    • #3
      Hallo Hagen,

      vielen Dank!
      Ach herje...
      Na dann, auf los geht's los...

      Ich habe schon sowas geahnt. Und da dachte ich mit meiner privaten Spielerei (Dateimanager mit Betrachter und vielem mehr...) fertig zu sein.

      Gruß
      Matthia

      Comment


      • #4
        Wenn Du mal überprüfts wie unter 2000/XP diese Thumbnails arbeiten, dann sieht man das auch dort erst bei Bedarf die Images gelesen werden. Angenommen Du nutzt 50x50 Thumbnails dann kriegste ja gerade mal 20x15 Thumbnails in ein 1024x768 Pixel View. Eine Imagelist sollte so viel ich weiß bis zur Bildschirmauflösung große Bitmap verwalten. Im Grunde is eine ImageList eine große Bitmap die in kleinere Bitmapbereich gesplittet wird. Natürlich ist diese Bitmap an die unterstützte Auflösung des Grafikkartentreibers gebunden. Generell ist es eher schlecht ALLE Daten auf einmal zu konvertieren, besser doch nur das was der user auch sehen kann. Ich hatte mal genau das gleiche Problem, lösste es dann über die Methode mit der Liste von TImageList verwarf das wieder und nutze nun die Methode mit der Dateiliste und dem direkten Liveanzeigen per thread.

        Hage

        Comment


        • #5
          Hallo Hagen<br>

          na, da bin ich echt gespannt, ob ich das hinkriege.<br>
          Vielen Dank für den Tipp mit dem Thread.<br>
          Da das ja mein Privatvergnügen ist, habe ich zum Glück keinen Druck.<br>

          Um zwei Tipps würde ich Dich aber noch bitten:<br>
          Wo zeigt man die Thumbnails am günstigsten (weil am schnellsten) an?<br>
          Bleibt es bei der Listview im Stil vsIcon? (Scheint mir bis jetzt das<br>
          schnellste zu sein.) Und wie benachrichtigst Du den Thread, dass er neu<br>
          zeichnen muss? Über OwnerDraw der Listview?

          Das würde mir schon alles sehr helfen. Dann müsste ich nicht mehr im<br>
          allerdicksten Nebel rumstochern!<br>

          Gruß<br>
          Matthia

          Comment


          • #6
            Ich würde kein ListView nehmen, sondern eine TPaintBox in einer TScrollbox. Angenommen ein Previewbild soll 32x32 groß sein, dann würde ich in der Imagelist 34x34 Pixel große Bitmap's ablegen. Diese 34x34 Bilder enthalten einen grauen linken und unteren Rand von einem Pixel. Nun wird die Imagelist so eingestellt das sie z.B. 10 solcher Bilder in einer Reihe verwaltet = 340 Pixel. Das Zeichnen geht nun indem ich direkt die ImageList-Bitmap von 340x 34*y Pixeln in der Paintbox Zeichne. Man zeichnet sozusagen alle Bilder in einem Rutsch. Die PaintBox wird an die Größe der Imagelist-Bitmap angepasst und zeichnet über diese Bitmap den Fokus/Selekions rahmen usw.
            Diese Vorgehensweise hat natürlich auch seine Nachteile, dürfte aber flickerfree, schnell und einfach sein.

            Gruß Hage

            Comment


            • #7
              Hallo Hagen,<br>

              vielen Dank!<br>
              Werde ich so probieren. Bisher war die Listview (mit vsIcon) immer am<br>
              schnellsten. gut, dass Du mich gleich auf richtige Spur gesetzt hast.<br>

              Gruß<br>
              Matthia

              Comment


              • #8
                Der richtige Weg hängt vom Ziel ab und das kenne ich nicht genau. Praktisch gesehen kann man sogar auf die IMageList verzichten und seine eigene Bitmap nutzen. Diese enthält dann z.B. 10 * 20 Previews a 34x34 Pixel. Oder man nutzt 20 solcher Bitmaps für jede Zeile. Das einlesen/scrollen über die Previews ist dann sehr einfach. Man nimmt eine TList mit 20 Bitmaps, kommt man ans Ende wird einfach die erste Bitmap an das Ende der List verschoben und die nächsten 10 Thumnails in diese Bitmap eingelesen.

                Gruß Hage

                Comment

                Working...
                X