Windows Forms; GUI mit "Texturen"

OP (Firma: tsx89) Persönliche Seite #4799973
Lesenswert?

Bei Spielen oder aufwändig designen Anwendungen gibt es immer wieder mal 
Buttons oder Felder, die eine Textur enthalten. Diese Fläche "reagiert" 
dann auch auf z.B. "Rollover", und ändert die Textur. Dabei sind beide 
"Bilder" (Normal u. Rollover) in einer einzigen Datei gespeichert. 
(Beispiel Anhang "BTN_Copy.tga").`

Das selbe Prinzip gibt es auch mit Animationen, oder kompletten "Custom 
Controls", die dann eine passende Textur zum jeweiligen "state" haben - 
Oder so ähnlich...  Beispielsweise beinhaltet die Textur eines Sliders 
jeden Wert als "fertiges Bild" - also jede Stellung (z.B. höhe des 
Sliders) ist bereits "vorgerendert". (Beispiel Anhang 
"knob_unison_stereo.tga")

Die "Texturen" stammen vom Musik-Programm "Fruity-Loops", welches 
komplett auf diese Weise "geskinnt" wurde.

http://cdn2.bigcommerce.com/server700/1bb04/products/2431/images/6988/FL_Studio_Fruity_Loops_Edition__62213.1395426068.1280.1280.png?c=2

Da ich mich allmählich um mein GUI kümmern muss, frage ich: Wie erstellt 
man solche Texturen, und vorallem: wie kann man diese benutzen? Gibt es 
da etwas fertiges? Und eine Bib für C#?

--> Man müsste im Endeffekt viel weniger (einzelne) Ressourcen laden, 
und der "Verwaltungs-Overhead" ist bestimmt auch geringer, als mit 
Einzelbildern zu hantieren - vorausgesetzt es gibt bereits eine gute 
Klasse dafür.

Wie heißt diese Art und Weise des Skinnen´s? Das interessiert mich 
ehrlich gesagt schon sehr lange, da mir diese "Art" schon sehr früh - 
schon zu DOS Zeiten - begegnet ist, und anscheinend auch noch heute 
verwendet wird.

Danke schon mal...

/Edit: Sorry der Browser kann ja (meist) kein TGA. Hab ich ganz 
vergessen. Und ich finde auf die schnelle grad keine Möglichkeit, das 
als jpg zu Posten....
Angehängte Dateien:
OP (Firma: tsx89) Persönliche Seite #4801895
Lesenswert?

Anscheinend werden diese Texturen direkt von z.B. DirectDraw 
"unterstützt". Jedoch will ich mich nicht an eine Schnittstelle binden. 
Daher bastel ich grad ne parametrierbare Usercontrol. Bis jetzt kann sie 
grob erkennen, wie die Textur in seine Einzelbilder zu teilen ist 
[Tiles] und dann ein Einzelbild[Index] anzeigen oder ausgeben.

Es sollen "Verhalten" eingestellt werden können, so dass man Scrollen 
oder Sliden kann, und die Control demnach die Texturen und Values selber 
anpasst. Ist gar nicht so einfach, jeden State festzuhalten.

Zum verdeutlichen ein Bild im Anhang:
Aus der großen Textur können viele kleine gemacht werden.
Es wird immer nur ein Teilstück ausgegeben. Derzeit der "Wert 85 von 
128".

Ich denke immer noch, dass es da bereits was fertiges gibt. Aber wonach 
kann ich denn suchen? Weiß denn wirklich niemand wie man diese Art von 
Texturen, oder die Anwendung davon nennt? Schlagworte nach denen ich 
Googlen kann? Oder habe ich so schlecht und unverständlich gefragt? ;-)

Gruß, tsx
Angehängte Dateien:
Gast #4801913
Lesenswert?

Hallo Tim,

das Stichwort, welches du vermutlich suchst, heißt "Texture Atlas".
Erstellt werden diese Texturen bei uns meist mit Photoshop (je nach 
Anwendung teils manuell, teils per Skript).
Viele Game-Engines und ein paar wenige GUI-Librarys bieten hier gleich 
von Haus aus entsprechende Funktionalitäten (z.B. 
http://doc.qt.io/qt-5/qsgtexture.html#texture-atlasses).

Viele Grüße,
Marcel
#4801914
Lesenswert?

Die "Form" Klasse kann sowas von Haus aus. Sogar Kacheln, Strecken und 
was auch immer.

Edit: Und fast jedes andere grafische Objekt natürlich auch.
Edit2: Für viele Bilder gibt es sogar ein diese verwaltendes "Objekt" 
zum (unsichtbar) auf der Form platzieren. c# ist für ... alle ... 
gemacht.

https://msdn.microsoft.com/de-de/library/system.windows.forms.imagelist(v=vs.110).aspx

Nocheinedit:
Das mit dem Scrollen geht so auch automatisch bei Hintergrundbildern 
scrollbarer Objekte.
Angehängte Dateien:
Gast #4801933
Lesenswert?

Hallo Tim,

das Stichwort, du hast es selber schon benutzt, um eigene Windows Forms 
Bedienelemente zu erstellen heißt "Custom Controls".
Das Prinzip um Custom Controls zu erstellen ist Vererbung:
1.  Du suchst dir ein existierendes Bedienelement, was deinen 
Vorstellungen am nächsten kommt. Zum Beispiel möchtest Du eine 
Schaltfläche erstellen ähnlich System.Windows.Forms.Button
2.  Dein Element erbt von dem Standard Element. Du erstellst also eine 
Klasse, welche von  System.Windows.Forms.Button  erbt.
3.  Du überschreibst Die OnPaint() Methode, um deine Textur anstelle 
eines grauen Kästchens anzuzeigen.

Die ersten beiden Treffer der Suche nach „windows forms custom control” 
ergaben:
http://www.codeproject.com/Articles/2016/Writing-your-Custom-Control-step-by-step
https://msdn.microsoft.com/en-us/library/ms996423.aspx

Das Beispiel aus dem ersten Link kann man ganz gut ausprobieren. Kleiner 
Fallstrick in Punkt 1: Mittlerweile heisst das Visual Studio Project 
„Windows Forms Control Library“ und nicht Windows Control Library“

Viele Grüße
Christian
OP (Firma: tsx89) Persönliche Seite #4802050
Lesenswert?

Lukas T. schrieb:
> Die "Form" Klasse kann sowas von Haus aus.
...
> Das mit dem Scrollen geht so auch automatisch bei Hintergrundbildern
> scrollbarer Objekte.

@ Lukas T.:
Ich weiß, das eine Form oder Control ein Hintergrund-Bild annehmen kann.
Zeig mir doch mal, wie ich diesen "Texture Atlas" von Haus aus 
einstellen kann? Das würde mir grad 100% die Arbeit abnehmen. // Oder du 
weißt wahrscheinlich nicht genau was ich meine... !!?? ;-)

@ Christian:
Ich nutze einfach die Event´s vom "UserControl", und brauche mich nicht 
auf einen "Button" (o.ä.) festlegen. Ich werde die verschiedenen 
"Verhalten" zusammen in die neue Control packen, sodass sie "universell" 
wird, und brauche dazu nicht erben oder Overriden. Das ist i.d.R. immer 
mehr als nur ein Button - und selbst wenn ich davon Erbe, bringt das mir 
gar nichts zum besagten Thema. Es würde mich in dem Fall wahrscheinlich 
nur einschränken. UserControl selbst hat doch alle nötigen Teile. 
Trotzdem Danke für die Erläuterung, wie man eine Usercontrol baut ;-)

Ich möchte mich wenn möglich an "Standard´s" halten, falls vorhanden - 
dass ich dann möglichst alle Texturen benutzen kann, und die Lib dann 
auch noch weiter verwendbar ist (Läuft bisher ganz gut) - und mit dem 
Schlagwort "Texture Atlas" komm ich erstmal weiter, Danke.

Marcel schrieb:
> Anwendung teils manuell, teils per Skript

Kennst / Hast du ein gutes Script, das Einzelbilder (Horizontal oder 
Vertikal) zusammenbauen kann?
Gast #4802066
Lesenswert?

Tim S. schrieb:
> Kennst / Hast du ein gutes Script, das Einzelbilder (Horizontal oder
> Vertikal) zusammenbauen kann?

Für Photoshop fällt mir hier das AtlasMaker-Script ein 
(http://richardjdare.com/blog/2012/11/atlasmaker-0-7-make-texture-atlases-in-photoshop/).
Alternativ sollten sich mit den Suchbegriffen "texture atlas maker", 
"texture atlas generator" oder "texture atlas packer" auch zahlreiche 
eigenständige Tools finden lassen.

Viele Grüße,
Marcel

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren