Autor Beitrag
Flitzs
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 123
Erhaltene Danke: 7

Win7 x64/86 WinServer 2008 R2 x64
C#/C++/C VS2010
BeitragVerfasst: Fr 22.08.08 18:33 
Hey,

ThumbnailViewer ist ein von mir geschriebenes c# Control das ich, zum Beitrag www.c-sharp-forum.de...re+Viewer_85910.html geschrieben habe.

Das Control soll eine Art Thumbnail-Listbox sein. Die Thumbnails können in 3 größen angezeigt werden (Small, Medium, Large). Zudem gibt es die 2 Properties SelectedIndex, SelectedBitmap welche den null-basierenden Index / das ausgewählte Bitmap zurückgeben. Die Eigenschaft ShowBorder gibt an, ob ein Rahmen um die Thumbnails gezeichnet werden soll.

mfg Flitzs


PS: Wer bugs / verbesserungen findet soll die mir doch bitte mitteilen ;)
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von Flitzs am Fr 22.08.08 22:37, insgesamt 1-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 22.08.08 18:58 
Hallo!

Schonmal keine schlechte Arbeit :zustimm:

Aber es kommt noch mehr Arbeit auf Dich zu :D

  1. Das Scrollen ist extrem langsam, dadurch dass da ständig neu gezeichnet wird.
  2. Dadurch, dass die großen Versionen der Bilder in der Liste bleiben müssen, braucht das extrem viel Speicher.
  3. Denke dran, dass man Bitmaps und Graphics, wenn man sie nicht mehr braucht, disposen sollte (fällt z.B. in OnPaint auf)
  4. Ein BeginUpdate / EndUpdate wäre nett, wenn man mal mehrere Bilder auf einmal hinzufügen will, ohne dass dazwischen neu gezeichnet werden soll
  5. SelectedBitmap und Thumbnails sollten in der Properties-Box im Designer nicht angezeigt werden
  6. Die Thumbnails sollten proportionserhaltend erstellt werden, im Moment wird das Seitenverhältnis des Originalbildes ignoriert
  7. Man sollte Rahmendicke und -farbe einstellen können.
  8. Namen von Klassen sollten nicht mit Namen von Namespaces identisch sein ([url=msdn.microsoft.com/d...57.aspx]Klick[/url])


Größtes Manko sind IMHO die ersten beiden Punkten. Das könnte man dadurch beheben, dass man dem Viewer keine Bitmaps in die Liste packt, sondern Dateinamen. Er erstellt dann einnmal die Thumbnails und gibt die großen Versionen wieder frei. Neu erstellen muss er die Thumbnails erst wieder, wenn die Thumbnail-Größe geändert wird. Dadurch, dass die Thumbnails schon gecached sind, könnte auch das Scrollen schneller gehen.

Grüße
Christian

P.S.: Oder man packt einfach Pictureboxes in ein Wrappanel *g*

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Flitzs Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 123
Erhaltene Danke: 7

Win7 x64/86 WinServer 2008 R2 x64
C#/C++/C VS2010
BeitragVerfasst: Fr 22.08.08 21:21 
Hey,
danke für die Hinweiße, werd mich ma dranhängen^^

Aber Punkt1 versteh ich ned ganz, wie willst du das denn sonst machen? Ich muss das ja jedes mal neu Zeichnen. Oder meinst du ich sollte das Buffer Bitmap dass dann entgültig gezeichnet wird nur neu zeichnen, wenn ein Bitmap / Selected Index geändert wird?

user profile iconChristian S. hat folgendes geschrieben:

P.S.: Oder man packt einfach Pictureboxes in ein Wrappanel *g*


Wäre ne Möglichkeit, aber ich hab das Control ja geschrieben, um den Verfasser des Postet für den ich das Control geschrieben habe, ne Möglichkeit zu zeigen wie er es machen könnte^^
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 22.08.08 21:30 
Das mit dem Zeichnen muss man ein bisschen ausprobieren. Ich denke aber, dass schon viel Performance gewonnen sein wird, wenn Du die Bilder nicht jedes Mal von Neuem verkleinerst. Vielleicht reich das sogar schon!

Ansonsten kann man über verschiedene Ansätze nachdenken: Es sind ja beim Scrollen immer viele gleiche Zeilen sichtbar. Wenn man erst einmal für jede Reihe eine Grafik erstellt und diese cached, kann man wahrscheinlich die meisten davon beim nächsten Mal wiederverwerten.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Flitzs Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 123
Erhaltene Danke: 7

Win7 x64/86 WinServer 2008 R2 x64
C#/C++/C VS2010
BeitragVerfasst: Fr 22.08.08 22:43 
So ich hab mal dran weitergebastelt ;)

user profile iconChristian S. hat folgendes geschrieben:

  1. Das Scrollen ist extrem langsam, dadurch dass da ständig neu gezeichnet wird.
  2. Dadurch, dass die großen Versionen der Bilder in der Liste bleiben müssen, braucht das extrem viel Speicher.
  3. Denke dran, dass man Bitmaps und Graphics, wenn man sie nicht mehr braucht, disposen sollte (fällt z.B. in OnPaint auf)
  4. Ein BeginUpdate / EndUpdate wäre nett, wenn man mal mehrere Bilder auf einmal hinzufügen will, ohne dass dazwischen neu gezeichnet werden soll
  5. SelectedBitmap und Thumbnails sollten in der Properties-Box im Designer nicht angezeigt werden
  6. Die Thumbnails sollten proportionserhaltend erstellt werden, im Moment wird das Seitenverhältnis des Originalbildes ignoriert
  7. Man sollte Rahmendicke und -farbe einstellen können.
  8. Namen von Klassen sollten nicht mit Namen von Namespaces identisch sein ([url=msdn.microsoft.com/d...57.aspx]Klick[/url])



1) Ich hab nun die Thumbs gecached und hinzugefügt werden wie du vorgeschalgen hast nur noch die Pfade.
2) Durch 1 erledigt
3) Gefixt, hatte ich vergessen ;)
4) Gefixt
5) Gefixt
6) Ich weiß nicht ganz wie ich das machen soll da die Thumbnails ja gleichgroß sein müssen sonst klappt das mit den Reihen beim anzeigen ja nicht mehr, oder was meinst du
7) Gefixt
8 )(Ohne Abstand zwischen 8 und ) wirds zum Smile 8)) Gefixt

PS: Wäre nett wenn du dir das mit den Scrollen nochma ansehen könntest, bei mir wars nähmlich in der ersten Version auch schon nicht langsam ;)
PPS: Ich hoffe das edit-hochladen in Beitrag 1 hat funktioniert ;)
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 22.08.08 23:03 
Ich guck mir die neue Version morgen an, allerdings ist mir gerade eingefallen, dass das viel einfacher geht: eine Listview mit View = Tile und eine ImageList mit den Thumbnails, die Du der LargeImageList-Eigenschaft der ListView zuweist. Damit bist Du dann schon fertig.

Warum mir das noch eingefallen ist, weiß ich nicht, ich hab's ja immerhin für SharpPix so gemacht :gruebel: Zwar nicht als Control, sondern einzeln auf der Form. Aber irgendwie werde ich doch alt :-(

user profile iconFlitzs hat folgendes geschrieben:
Ich weiß nicht ganz wie ich das machen soll da die Thumbnails ja gleichgroß sein müssen sonst klappt das mit den Reihen beim anzeigen ja nicht mehr, oder was meinst du
So, wie der Windows Explorer das z.B. auch zeigt. Du legst fest, dass das Thumbnail z.B. 120px mal 120px maximal haben darf. Und dann skalierst Du das Bild proportionserhaltend runter, bis sowohl Höhe als auch Breite in diese "Box" passen. Und dieses Thumbnail zeichnest Du dann auf einen weißen Hintergrund von 120 x 120 Pixeln. Also quasi was Fernseher machen, wenn das ausgestrahlte Bild nicht dem Bildverhältnis des TV entspricht ;-)

Ich kann morgen mal den Quellcode-Teil von SharpPix raussuchen, bei dem die Thumbnails erzeugt werden. Dürften aber noch Jugendsünden von mir drin sein :D

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Flitzs Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 123
Erhaltene Danke: 7

Win7 x64/86 WinServer 2008 R2 x64
C#/C++/C VS2010
BeitragVerfasst: Fr 22.08.08 23:16 
Hey,
hmm wenn das einfacher auch geht, muss ich mir halt was einfallen lassen was mit dem Listview nicht geht ;)

Hab da auch schon n paar gedanken:
    *Ne Art Popupmenü wo man die eizelnen (original) Bilder umbennen, ... kann
    *Pfad, Name, Größe unter dem Bild anzeigbar machen
    *mir fällt sicher noch mehr ein, vielleicht kommt ja von euch noch was ;)
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 22.08.08 23:20 
user profile iconFlitzs hat folgendes geschrieben:
Ne Art Popupmenü wo man die eizelnen (original) Bilder umbennen, ... kann
Popup-Menüs sollen ja bei einer ListView auch schon gesichtet worden sein ;-) Und außerdem hat das IMHO in einer Komponente zur Anzeige von Thumbnails nichts zu suchen :nixweiss:

user profile iconFlitzs hat folgendes geschrieben:
Pfad, Name, Größe unter dem Bild anzeigbar machen
Das ist schon eher was. ;-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Flitzs Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 123
Erhaltene Danke: 7

Win7 x64/86 WinServer 2008 R2 x64
C#/C++/C VS2010
BeitragVerfasst: Fr 22.08.08 23:30 
user profile iconChristian S. hat folgendes geschrieben:
user profile iconFlitzs hat folgendes geschrieben:
Ne Art Popupmenü wo man die eizelnen (original) Bilder umbennen, ... kann
Popup-Menüs sollen ja bei einer ListView auch schon gesichtet worden sein ;-) Und außerdem hat das IMHO in einer Komponente zur Anzeige von Thumbnails nichts zu suchen :nixweiss:


Hmm da hast du schon irg. recht. Ich persönlich hab noch nicht viel mit ListViews gearbeitet, weiß also daher ned sicher was die alles können :o

Naja war ja nur ne Idee ;)

mfg Flitzs