Benutzer mit den meisten Antworten
c#-Transparency Probleme.

Frage
-
Hallo Leute, mich plagt ein Problem, dessen Ursprung ich mir nicht so recht erklären kann.
Ich habe eine Windows-Form und darüber ein paar Controls gelegt.
Die Form im ganzen ist (aufgrund des Randes) etwas transparent (außerhalb des Images).
Nun aber werden mir transparente Stellen angezeigt, wo garkeine sein dürften.
VisualStyles hatte ich deaktiviert und auch wieder aktiviert. Hintergrundfarbe geändert (im Entwurf).
Wieso das so ist, kann ich mir nicht erklären, aber ich poste einfach mal ein paar Bilder.
SO sollte er aussehen. er tut es, allerdings mit aktivierten VisualStyles UND einem custom Windows-Theme
http://www.abload.de/img/bg_soll76pp2.png
Da dieses Theme eben nicht alle Nutzer haben, sehen sie die Form so:
http://www.abload.de/img/bg_istw5p5p.png
Deaktiviere ich die VisualStyles, sieht es bei mir genau so aus.
Ich habe es auch schon mit diversen anderen Formaten versucht (jpg, bmp um zu schauen, ob die Transparenz dann verschwindet. Ergebnis: sie bleibt, also scheint es etwas zu sein, dass das Bild im ganzen Stört).
Irgend ein Anhaltspunkt, woran das liegen könnte?
Geschrieben ist das ganze in C# (.netFramework 4.0)
Vielen Dank für die Hilfe- Bearbeitet Grid Stalker Freitag, 3. Februar 2012 22:00
Antworten
-
Alle Flächen mit dem RGB-Wert (0, 0, 0) sind transparent. alle anderen Schwarzen Pixel haben in deinem Bild einen wert von (1, 1, 1). Stelle Darum die TransparenceKey-Eigenschaft auf Transparent.
this.TransparencyKey = System.Drawing.Color.Transparent;
Damit werden nur Transparente Pixel transparent, die wirklich Transparent sind. Sie dazu MSDN.
Koopakiller - http://koopakiller.ko.ohost.de/- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 22. Februar 2012 17:26
-
dieser wert steht bereits auf 100.
transparent sollte ja nur alles ausserhalb des randes/rahmens sein. also die grenze ist eben der braun/goldene rahmen. da dieser aber etwas ausschweift, benötige ich darüber hinaus eben einen transparenten hintergrund.
denn so ist mein hintergrund nun komplett schwarz, auch über den rahmen hinaus
EDIT: hab ne "Lösung" für das Problem gefunden. Nun weiß ich auch wieder, wieso ich den TransparencyKey auf Background gesetzt habe.
eine transparente Ebene in Photoshop hab ich jetzt mal als grundfläche genommen und siehe da, nun geht es genau so, wie es soll.
dh einfach nur eine zusätzliche ebene erstellt, als erste ebene gewählt, abgespeichert und programm erneut erstellt.
mich wundert es nur dass er das bei jpg/bmp trotzdem alles auf transparent gesetzt hat. woher sollte er denn diese informationen da haben?
- Bearbeitet Grid Stalker Samstag, 4. Februar 2012 00:05
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 22. Februar 2012 17:26
Alle Antworten
-
Alle Flächen mit dem RGB-Wert (0, 0, 0) sind transparent. alle anderen Schwarzen Pixel haben in deinem Bild einen wert von (1, 1, 1). Stelle Darum die TransparenceKey-Eigenschaft auf Transparent.
this.TransparencyKey = System.Drawing.Color.Transparent;
Damit werden nur Transparente Pixel transparent, die wirklich Transparent sind. Sie dazu MSDN.
Koopakiller - http://koopakiller.ko.ohost.de/- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 22. Februar 2012 17:26
-
das ist ja das kuriose, denn das steht bereits auf transparent.
deswegen verwundert es mich umso mehr, wieso er diese transparent darstellt
den transparency-key ignoriert er zudem vollkommen (wieso auch immer)OKAY, KOMMANDO ZURÜCK!
es lag tatsächlich daran:
this.TransparencyKey = this.BackColor;
danke für den hinweis. was mich da geritten hat, keine ahnung.. und die hintergrundfarbe war ja auch schwarz gestellt. hatte das sonst immer nur noch im designer geändert.
ich danke dir, nun siehts wieder so aus, wie es sein soll :)
EDIT: oder auch nicht. nun hab ich im transparenten bereich auch alles in schwarz, obwohl das image genau an diesen stellen transparent ist.
stell ich das um, entfernt er wieder zu viel. dabei soll doch nur der rand transparent bleiben
- Bearbeitet Grid Stalker Freitag, 3. Februar 2012 23:51
-
-
dieser wert steht bereits auf 100.
transparent sollte ja nur alles ausserhalb des randes/rahmens sein. also die grenze ist eben der braun/goldene rahmen. da dieser aber etwas ausschweift, benötige ich darüber hinaus eben einen transparenten hintergrund.
denn so ist mein hintergrund nun komplett schwarz, auch über den rahmen hinaus
EDIT: hab ne "Lösung" für das Problem gefunden. Nun weiß ich auch wieder, wieso ich den TransparencyKey auf Background gesetzt habe.
eine transparente Ebene in Photoshop hab ich jetzt mal als grundfläche genommen und siehe da, nun geht es genau so, wie es soll.
dh einfach nur eine zusätzliche ebene erstellt, als erste ebene gewählt, abgespeichert und programm erneut erstellt.
mich wundert es nur dass er das bei jpg/bmp trotzdem alles auf transparent gesetzt hat. woher sollte er denn diese informationen da haben?
- Bearbeitet Grid Stalker Samstag, 4. Februar 2012 00:05
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 22. Februar 2012 17:26
-
Ich habe versucht dein Problem nachzustellen.
Ich habe FormBorderStyle auf None gesetzt, dann den Background auf Magenta, genauso wie den TransparencyKey.
Mein Bild habe ich im 32Bit PNG Format als BackgroundImage mit dem BackgroundImageLayout auf None stehend eingerichtet.
Opacity steht auf 100%.Dann hat es ohne Probleme funktioniert.
Koopakiller - http://koopakiller.ko.ohost.de/ -
gut, ich hatte ja bereits auf der png einen transparenten hintergrund. erst mit der zusätzlichen ebene hat es diesen auch als hintergrund akzeptiert.
vorher eben hat er sich an dem schwarz bedient, obwohl dieses nicht als hintergrundfarbe gesetzt war.
ich danke dir trotzdem, auch wenn die "lösung" schlussendlich doch gänzlich woanders lag. allerdings hat mich dein anstoß auf den richtigen weg gebracht. und da ich (grafisch gesehen) ne absolute null bin, sei mir mal verziehen dass ich an sowas nicht gedacht habe :P
fürs nächste mal weiß ich es nun. angenehmes wochenende wünsch ich dir noch ;)
- Bearbeitet Grid Stalker Samstag, 4. Februar 2012 00:16