.NET PictureBox Alternative

Mordhorst3k

Lieutenant
Registriert
Juni 2008
Beiträge
602
Hi,

kennt jemand von euch (im optimalfall freie) Alternative für die Picturebox, wo man JPG/TIF laden kann, die nicht so brutal langsam ist?

Wir digitalisieren Bücher und haben ein Tool, wo das Originalbild geladen wird, zusätzlich werden in zwei weiteren Boxen das gleiche Bild geladen und die Buchecken oben links/rechts gezoomt.

Die Bilder haben in der Regel eine recht hohe Auflösung, vor allem die TIFs können mitunter deswegen sehr langsam geladen werden.

Zusätzlich wäre es sehr praktisch, wenn die Alternative auch das eingebettete ICC Profil lesen und schreiben kann. Oder zumindest eine Bibliothek mit der das geht.

Kennt jemand von euch was freies, wasbrauchbar ist und innerhalb einer Firma genutzt werden kann?

Vielen Dank für eure Tipps im voraus!
 
Ich würde da anders vorgehen und erstmal die Bilddaten verkleinern
 
  • Gefällt mir
Reaktionen: aragorn92
So allgemein kann man da kaum was sagen.

Wie groß sind die Dateien? Sind sie so groß, dass schon einfach das Laden von der Platte so lange dauert? Dann helfen nur Thumbnails.

Andere Möglichkeiten: (V)RAM voll, irgendwas wird auf der CPU gemacht, was eigentlich auf die GPU gehört usw.

Ich habe in der Arbeit mit sehr großen Bildern guter Erfahrungen mit https://github.com/kleisauke/net-vips was laden und verarbeiten angeht. Aber einen Viewer hat das nicht.
 
Du kannst dir mal Skiasharp anschauen wenn's frei sein soll, das müsste sowas dabei sein.
Ansonsten Imagesharp wenns kommerziell sein darf, aber da weiß ich nicht wie weit da Winforms support drin ist.
 
Mordhorst3k schrieb:
Hi,

kennt jemand von euch (im optimalfall freie) Alternative für die Picturebox, wo man JPG/TIF laden kann, die nicht so brutal langsam ist?
Ja, klar. Einfach WPF nehmen und nen Image verwenden. Geht auch asynchron. Warum nimmst du 20 Jahre altes Windows Forms??
 
  • Gefällt mir
Reaktionen: Autokiller677 und aragorn92
Mordhorst3k schrieb:
Wir digitalisieren Bücher und haben ein Tool, wo das Originalbild geladen wird, zusätzlich werden in zwei weiteren Boxen das gleiche Bild geladen und die Buchecken oben links/rechts gezoomt.
Ihr kommt (hoffentlich) nicht auf die Idee, das Bild dreimal zu laden? Selbst asynchron wäre das verschwendete Zeit. Einmal laden und dem Anzeigeelement zuweisen. Oder gar vorher passend beschneiden, wenn der Ausschnitt fix bleibt) genügt vollkommen.

Da ich auf so alten Krempel stehe (zum Glück ist das bei mir ein privates Projekt aus vor WPF-Zeiten, bei dem ich mich nicht mit WFP gerumschlagen muss), habe ich damals ein paar Ideen vom folgenden Projekt übernommen
https://www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=15743
Damit habe ich auch kein Problem, 45 MPix Bilder anzuzeigen und ohne Ruckeln einen 100% Ausschnitt zu verschieben.

Wobei der Trick am Ende nur war (alles mit 8 Bit Bildern) durchgängig in Format32bppPArgb zu arbeiten. Und schon kommt auch ein lahmes Windows-Atom Tablet mit 45 MPix Bildern zurecht.

Farbmanagement: wenn ich das wollte (mir reicht bis heute 8 Bit und sRGB) müsste man das halt beim Landen der Bilder anwenden und damit leben, dass das ganze lahm wird. Man sieht ja u.A. an IrfanView wie lahm sowas werden kann.
 
Autokiller677 schrieb:
Ich habe in der Arbeit mit sehr großen Bildern guter Erfahrungen mit https://github.com/kleisauke/net-vips was laden und verarbeiten angeht. Aber einen Viewer hat das nicht.

Tornhoof schrieb:
Du kannst dir mal Skiasharp anschauen wenn's frei sein soll, das müsste sowas dabei sein.
Ansonsten Imagesharp wenns kommerziell sein darf, aber da weiß ich nicht wie weit da Winforms support drin ist.

Danke, schaue ich mir mal an.

Thaxll'ssillyia schrieb:
Ja, klar. Einfach WPF nehmen und nen Image verwenden. Geht auch asynchron. Warum nimmst du 20 Jahre altes Windows Forms??

Weil ich, was C# angeht, Anfänger bin. Mir wurde auch von jemand anderen (der ist Pro), dass ich überhaupt nicht mehr das alte WinForms nehmen soll, sondern das neuere. (habe den Namen vergessen)

gymfan schrieb:
Da ich auf so alten Krempel stehe (zum Glück ist das bei mir ein privates Projekt aus vor WPF-Zeiten, bei dem ich mich nicht mit WFP gerumschlagen muss), habe ich damals ein paar Ideen vom folgenden Projekt übernommen
https://www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=15743
Damit habe ich auch kein Problem, 45 MPix Bilder anzuzeigen und ohne Ruckeln einen 100% Ausschnitt zu verschieben.

Das ist tatsächlich ein Problem, weil ich nicht weiß, wie man ein Bild per Code zoomt bzw. scrollt.

gymfan schrieb:
Farbmanagement: wenn ich das wollte (mir reicht bis heute 8 Bit und sRGB) müsste man das halt beim Landen der Bilder anwenden und damit leben, dass das ganze lahm wird. Man sieht ja u.A. an IrfanView wie lahm sowas werden kann.

Die Bilder haben alle ein eingebettetes "eciRGB_v2" Profil. In welchem Format die Bilder angezeigt werden sollen, ist daher eigentlich (fast) egal, weil es hier nur um Kontrolle geht, um zu sehen, ob Seiten beim Scannen übersehen/überblättert worden sind.

Allerdings kann es mal vorkommen, dass ein Bild neu gescannt werden muss, weil bspw. ein Einleger fehlt. Einleger sind weiß und haben Text wegen Leerseiten. Kunden wollen gerne, dass ab einer bestimmten Anzahl von Leerseiten solche Einleger drin sein sollen, wenn man die vergisst, muss die Seite neu gescannt werden. Aufwändig, wenn man das Buch wieder aus der Kiste holen muss, daher würde ich das gerne digital machen.

Also kleines Tool basteln. Bild laden, den Einleger digital erzeugen, weiße Textbox, schwarze Schrift. Aber ICC Profil muss dazu geladen werden, damit die Farben nicht verfälscht werden und dann das Profil wieder einzubetten.
 
Mordhorst3k schrieb:
Das ist tatsächlich ein Problem, weil ich nicht weiß, wie man ein Bild per Code zoomt bzw. scrollt.
Ok, wenn der Entwickler schon an den .NET Basics (im Bezug auf Bitmap-Bearbeitung) wie
System.Drawing.Bitmap
System.Drawing.Graphics
scheitert, suchst Du Dir wirklich besser eine Library, die alles mit einem Aufruf so macht, wie gewünscht.

Und da NetVips auf libvips basiert und diese mit vips_icc_transform() oder vips_colourspace() anscheindend eine Methode bietet, um Bilder mit ICC-Profile zu konvertieren, dürfte das wohl die beste Lösung für Dich sein.
 
Mordhorst3k schrieb:
Weil ich, was C# angeht, Anfänger bin. Mir wurde auch von jemand anderen (der ist Pro), dass ich überhaupt nicht mehr das alte WinForms nehmen soll, sondern das neuere. (habe den Namen vergessen)
Leider ist UI bei C# ein ziemliches Schlachtfeld. Microsoft hat sich nie getraut, altes mal wirklich einzumotten, deshalb fliegt so altes Zeug wie Winforms immer noch rum, obwohl der Nachfolger (WPF) auch schon > 10 Jahre alt ist.

Der aktuelle Stand ist ziemlich unübersichtlich. Man muss sich dem ganzen eher aus der Richtung nähern, wo man später seine Anwendungen laufen lassen will.

Windows-only? Als Anfänger dann WPF. Ja, WinForms ist etwas einfacher, aber von den Konzepten sehr veraltet. Mit WPF - wenn man MVVM als Pattern zur Strukturierung des Programms nutzt - lernt man moderne Konzepte wie Bindings usw., die auch viele andere UI-Frameworks nutzen, nicht nur in C#, sondern auch in anderen Sprachen bis ins Webdesign. Die Kenntnisse kann man dann später leicht mitnehmen.

Multiplattform, aber Desktop (Window, Linux, MacOS) - AvaloniaUI. Ist nicht von Microsoft, sondern einem dritten Unternehmen. Sehr ähnlich zu WPF, läuft aber halt auch auf anderen OS als Windows. Grundsätzlich kann Avalonia so ziemlich überall laufen - Smartphone, Browser, Tablet, Desktop usw. Wenn man also nicht so sicher ist, wo es hingeht, ein bisschen ein Schweizer Taschenmesser.

Mobilgeräte: Bisschen im Umbruch aktuell. Bisher viel Xamarin, und eigentlich hatte Microsoft mit MAUI dann einen Nachfolger entwickelt, aber die Gerüchteküche sagt, der könnte auch schon wieder halb auf dem Weg ins Grab sein.

Browser / WebApps: Blazor. Da entwickelt Microsoft auch gerade kräftig dran, und mit net8 kommen im Herbst viele neue Features.

Ich hoffe die grobe Einordnung hilft etwas. Ich hab selber vor knapp 5 Jahren mit WPF gestartet und bereue es nicht - solide Grundlage und finde mich in anderen Frameworks jetzt schnell zurecht, weil die Konzepte halt häufig ähnlich sind. Mittlerweile stelle ich immer mehr auf Avalonia um, weil ich neben Windows auch einen Mac hab und es sonst halt nicht läuft.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Mordhorst3k
gymfan schrieb:
Ok, wenn der Entwickler schon an den .NET Basics (im Bezug auf Bitmap-Bearbeitung) wie
System.Drawing.Bitmap
System.Drawing.Graphics
scheitert, suchst Du Dir wirklich besser eine Library, die alles mit einem Aufruf so macht, wie gewünscht.

Und da NetVips auf libvips basiert und diese mit vips_icc_transform() oder vips_colourspace() anscheindend eine Methode bietet, um Bilder mit ICC-Profile zu konvertieren, dürfte das wohl die beste Lösung für Dich sein.
Ich bitte vielmals um Entschuldigung, dass ich C# erst seit etwa einem Monat benutze... (ingesamt über mehrere Wochen verteilt).


@Autokiller677

Danke für deinen Beitrag!
 
Etwas Zeit vergangen und nicht mehr ganz der C# Noob.

Die Picturebox lädt ein ICC Profil automatisch, wenn eines vorhanden ist...
 
Zurück
Oben