Hallo Community,
ich habe in meiner Windows-Form mehrere Textstücke / Labels (momentan 20 Stück), die ich gerne mit einem halbtransparenten PNG-Bild unterlegen möchte.
Das Bild selber ist nicht groß (100 x 32 Pixel, ca. 1 kb). Jedoch dauert eine ganze Weile (1 - 2 Sekunden), bis alle Bilder geladen werden. Selbst wenn ich das Fenster nur minimiere und wieder hervor hole.
Ich habe die Bilder alle per Form-Designer als Recourse geladen. Was kann ich tun, damit sich die Bilder schneller aufbauen?
Grüße,
Jack
-> Informatik-Infotainment <-
Was soll in einem Label oder Picturebox oder egal was für'n WinFormDing die (Halb)Transparenz bewirken?
Was soll in einem Label oder Picturebox oder egal was für'n WinFormDing die (Halb)Transparenz bewirken?
Damit hebt sich die Schrift besser von einem heterogenen Hintergrund ab.
-> Informatik-Infotainment <-
Kannst du das genauer erläutern? Ich denke das ist abhängig vom Content der Grafikund vom Fensterhintergrund(HalbTransparenz)-Das Abheben.
Weiterhin frage ich mich wie du die Halbtransparenz herstellst, da es eine direkte Unterstützung nicht gibt(es sei denn WPF != WinForms).
Weiterhin frage ich mich wie du die Halbtransparenz herstellst, da es eine direkte Unterstützung nicht gibt(es sei denn WPF != WinForms).
Also noch mal zur Erklärung: Der Form-Designer erlaubt mir für Labels per Eigenschaft "Image" ein Hintergrundbild für den Text zu wählen. Dafür nehme ich ein halbtransparentes PNG-Bild. Die Transparenz-Eigenschaft wird in dieser Bilddatei gespeichert.
Und davon habe ich eben sehr viele, sodass das Fenster recht lange zum Aufbauen braucht.
-> Informatik-Infotainment <-
Ein 32-Bit-PNG also?
Nein, 8 Bit. Nur Graustufen.
-> Informatik-Infotainment <-
8 Bit hat keinen Transparenzkanal.
Ich schliesse Formatschwierigkeiten jetzt aus.
Wie sieht es bei einem 2. Aufruf der Form aus?(lange Kompilierungszeit am Start)?
Wie hoch ist die Anzahl(ungefähr)?
8 Bit hat keinen Transparenzkanal.
Du hast recht. Ich habe noch mal nachgeschaut. Es hat 32 Bit.
Wie sieht es bei einem 2. Aufruf der Form aus?(lange Kompilierungszeit am Start)?
Wie hoch ist die Anzahl(ungefähr)?
Die Kompilierung dauert genau so lange wie sonst auch. Nur das erste Laden ist durch die Bilder verlängert. Das merkt man daran, dass die Bilder nacheinander in die Form "eingesetzt" werden, also es schaut so aus, als ob die Bilder nacheinander aufploppen. Ansonsten merkt man es besonders beim Minimieren und Wiederherstellen des Fensters. Ich verwende momentan ca. 20 Labels + Bilder, es sollen aber später noch mehr werden.
-> Informatik-Infotainment <-
Mit Kompilierung meinte ich in dem Fall die JIT-Kompilierung, mein Fehler.
Könntest du die Zeiten messen, zw. Init(Constructor) & Load im Vergleich zu Bmp-Ressourcen?
Ich sehe da jetzt spontan 2 Möglichkeiten(Spontaner Gedanke). Entweder sind die Grafiken unangemessen gross für die Darstellung oder die API hat ein Problem mit dem PNG-Format bei dieser Farbtiefe.
Ich habe mal testweise das halbtransparente PNG-Bild durch ein einfaches, 10x10 Pixel-großes BMP- / JPG-Bild ersetzt. Es dauert genauso lange: ca. 1 Sekunde bei 20 Bildern, unabhängig von Format, Transparenz und Größe.
-> Informatik-Infotainment <-
mmh ok.
Ich sehe noch 2 Möglichkeiten,
eine wäre(du schriebst vom "nacheinander aufploppen"), die Dinger(labels was immer) per Default invisible zu machen und erst im Form_Load per Loop wieder sichtbar(bringt etwas, nicht viel).
Andererseits ist eine Sekunde nicht allzuviel und wozu gibt es Splashscreens, wenn nicht um den User beim Laden zu Unterhalten...
Die Verzögerung beim Starten ist nicht so schlimm. Aber dass die Bilder so langsam laden, nachdem man das minimierte Fenster wieder aufruft... Das möchte ich vermeiden.
-> Informatik-Infotainment <-
Ja das nervt, daher der Vorschlag mit dem Invisible, dann visible nach dem Init der Componenten oder auch der Form selbst.
(mir kommt die Beschreibung irgendwie bekannt vor, passiert das auch so im Releasemode(D-Klick auf exe)?, soviel Kram ist das doch eigentlich nicht)
Probier doch mal, die Dateien beim Programmstart in den ImageBuffer zu schreiben und hol sie Dir dorther wenn Du sie im Fenster benötigst. Damit entfällt zumindest schon einmal die Zeit für das Nachladen.
Finde, einen Versuch ist es Wert.
Nicht für das Leben, für die Arbeit lernen wir ...
Windows ist Klasse, ich nehme es um Linux zu downloaden ....
Hallo zusammen,
ich konnte das Problem weiter eingrenzen. Offenbar liegen die Performance-Probleme nicht an den Grafiken, sondern an der Transparenz-Eigenschaft der Labels selbst. Standardgemäß hat ein Label eine bestimmte Hintergrundfarbe. Wenn man diese jedoch auf transparent stellt, bekommt man jene Performance-Einbrüche.
In diesem Thread wird dasselbe Problem beschrieben, und auch hier scheint es an der Transparenz der Controls zu liegen. Leider konnte das Problem dort nicht gelöst werden.
-> Informatik-Infotainment <-
Hallo Jack_AI,
statt Labels zu verwenden kannst du auch alles einfach selber zeichnen. Siehe [Tutorial] Zeichnen in Windows-Programmen (Paint/OnPaint, PictureBox).
herbivore
Das Blöde an GDI ist, das das Zeichen (Berechnung der Bildpunkte, Z-Index) fasst ausschließlich die CPU übernimmt. Da bei Transparenz ein zusätzlicher "Farbkanal" hinzu kommt, kann sich die Berechnung um den Faktor 256 schonmal erhöhen. Ein anderen Ansatz verfolgt WPF. Dort werden Windows-Controls, Grafiken usw. durch die Grafikkarte (DirectX) gerendert, was die CPU entlastet.
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...
Es ist wohl nur fair, euch über meinen aktuellen Status zu unterrichten.
kleines_eichhoernchen hat mich auf die Idee gebracht, das Projekt für WPF umzugestalten. Nun versuche ich herauszufinden, wie ich das möglichst einfach und schmerzfrei machen kann. Bei näherer Betrachtung wäre WPF so oder so besser geeignet. Momentan fehlt mich jedoch die Motivation, das Projekt auf WPF umzustellen, zumal ich mir dafür mehr Wissen über WPF aneignen müsste.
Wenn das Projekt Fortschritt macht, melde ich mich wieder.
Jack
-> Informatik-Infotainment <-
Der Umstieg auf WPF ist leider sehr schwer und WPF ist mir (noch?) ein paar Nummern zu hoch. Darum werde ich wohl auf Controls mit transparentem Hintergrund verzichten müssen. Ich kann nur hoffen, dass diese Performance-Probleme im Zuge eines .NET-Updates behoben werden (sehr unwahrscheinlich).
Ansonsten Danke für eure Hilfe. Vielleicht tue ich mir irgendwann noch mal WPF an.
Jack
-> Informatik-Infotainment <-
Ich persönlich habe für die Grundlagen von WPF 3 Tage gedauert, wenn du die Zeit hast (und natürlich auch die Lust dazu), schau dir WPF mal mit allen Möglichkeiten die es bietet an, es lohnt sich auf jeden Fall.
Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...