Forum: PC-Programmierung Windows Forms; GUI mit "Texturen"


von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Angehängte Dateien:

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....

: Bearbeitet durch User
von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


Angehängte Dateien:

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

: Bearbeitet durch User
von Marcel (Gast)


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

von Lukas T. (tapy)


Angehängte Dateien:

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.

: Bearbeitet durch User
von Christian (Gast)


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

von Tim S. (Firma: tsx89) (freak_ts) Benutzerseite


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?

von Marcel (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.