Hallo, ich suche nach einer Möglichkeit, das Einbrennen in einem Monitor zu vermeiden. Und zwar habe ich erfahren, dass man einen schwarzen Streifen pro Bildwiederholung herunterbewegen kann (ohne ihn zu sehen) und damit das "Image Sticking" vermeiden kann. Diese Prozedur sollte im Hintergrund laufen. Wie kann man so etwas am besten in C++ lösen? Ich denke das wird so ein low level Programm sein, aber wie könnte man das umsetzen?
Image Sticking vermeiden
Antworten |
Anmeldungsdatum: Beiträge: 965 Wohnort: Upper Austria |
|
![]() Anmeldungsdatum: Beiträge: 7174 Wohnort: Wolfen (S-A) |
Hi Franz, nach meiner Erfahrung ist das "einbrennen" eigentlich ein Phänomen aus der frühen Zeit der Röhrenmonitore ... ("Als die Schirme noch grün waren") Jedenfalls wüsste ich nicht, dass so etwas bei einem LCD-Schirm überhaupt passieren kann. Auf jeden Fall spielt so etwas ja auf der Ebene des Grafik-Treibers, und Du wirst den dann wohl patchen müssen ... oder liege ich da falsch ? track |
![]() Anmeldungsdatum: Beiträge: 550 |
Stimmt, nur bei Röhrenmonitoren gab das. |
(Themenstarter)
Anmeldungsdatum: Beiträge: 965 Wohnort: Upper Austria |
Hallo track, es geht schon um eine praktische Nutzanwendung. Das "Image Sticking" gibt es schon bei LCD Monitoren, jedoch ist das nicht unbedingt ein Einbrennen, d.h. es lässt sich wieder rückgängig machen.
Aha, eine einfachere Möglichkeit gibt es nicht? Ein thread, der beim Hauptprogramm immer wieder diese "Wanderung" laufen lässt? |
![]() Anmeldungsdatum: Beiträge: 7174 Wohnort: Wolfen (S-A) |
Schau Dir mal den Aufbau von so einem X-Server an: http://monarch.qucosa.de/fileadmin/data/qucosa/documents/4378/data/desktop.html Da ist von Klienten-Seite nicht viel an der Schirmsteuerung zu machen. Wir sind ja nicht mehr in der DOS-Zeit, wo man einfach am Video-Speicher herumgewuselt hat. Also musst Du wohl doch in den X-Server einsteigen ... Vielleicht geht da auch schon was oberhalb der Treiber-Ebene, das weiß ich aber nicht genau. Na ja, "viel Erfolg" würde ich mal sagen. track |
Anmeldungsdatum: Beiträge: 3620 |
|
(Themenstarter)
Anmeldungsdatum: Beiträge: 965 Wohnort: Upper Austria |
Da brauche ich nur in Google eingeben '"Image Sticking" lcd monitor' oder 'ghost image'. |
![]() Anmeldungsdatum: Beiträge: 2510 |
Möchte nur kurz in den Raum werfen, dass sich eine Weile lang ein Teil der Window-Decorations auf meinen zweiten TFT „eingebrannt“ hatte. Ist wieder weg, aber es taucht definitiv auch bei TFTs auf. Oder es war ein sehr ulkiger Zufall. |
![]() Anmeldungsdatum: Beiträge: 7785 |
Mir ist einmal was eingebrannt, das war mein erster Rechner mit 14" Farb-CRT von Compaq. Seither nicht mehr weder bei neueren CRTs noch bei TFTs. Ich habe für meinen TFT mal in Python (pygame) eine App geschrieben, die einen bestimmten Pixel befeuert hat. Weil manche Leute behauptet haben, damit könnte man einen defekten Pixel aufwecken. Hat bei meinem TFT mit einem Subpixelfehler leider nicht geklappt. Im Prinzip könntest du das auch so machen, eine App schreiben die ein 1x1 Pixel "Fenster" ohne Fensterdekoration aufmacht und dieses "Fenster" über den Bildschirm wandern läßt. Einziger Nachteil, der Fenstermanager muß mitspielen: Fensterdeko weglassen können und einen Layer haben damit es immer im Vordergrund ist, und noch viel wichtiger, anderen Apps nicht den Fokus wegnehmen. Allerdings wird das zu viel verschwendeter Rechenzeit führen. Wenn da sowas über den Bildschirm wandert muss ja auch ständig das Fenster drunter neu gezeichnet werden. Sofern du also nicht in einer ganz speziellen Situation bist (z.B. Standbild für den Plasma-Monitor im Schaufenster) lohnt sich das einfach nicht. Über eines brauchst du dir auch keine Illusionen machen: Unsichtbar ist das nicht. Wenn es nicht dargestellt wird hilft es auch nicht gegen Einbrennen. |
(Themenstarter)
Anmeldungsdatum: Beiträge: 965 Wohnort: Upper Austria |
Danke für die ausführliche Beschreibung. Na ja, dann ist das sehr kompliziert und das Ergebnis auch eher fragwürdig. Ist die Frage, ob man das nicht gleich lassen sollte. |
![]() Anmeldungsdatum: Beiträge: 1651 Wohnort: Münster |
Hallo, ich vermute mal, dass im Wesentlichen dieses Phänomen gemeint ist, oder? Egal: Ich wollte eigentlich nur sagen, dass es prinzipiell natürlich ohne viel Aufwand möglich ist, Linien auf den Screen zu zeichnen - auch ohne den Grafiktreiber zu patchen. Mit der xlib etwa. Hier findet sich etwa ein Beispiel, wie man mit Python Linien auf den Bildschirm zeichnet. Sollte sich ja recht leicht so anpassen lassen, dass die Linien automatisch gezeichnet und nach kurzer Zeit wieder gelöscht werden. Letztlich glaube ich, dass man mit dem Energiesparmodus eines Bildschirms deutlich besser bedient ist. Aber wenn man unbedingt Linien malen will, geht das auch (irgendwie) auf Anwendungsebene. Das das nicht die effizienteste Lösung ist, ist natürlich auch klar ☺. Besten Gruß, brb |
(Themenstarter)
Anmeldungsdatum: Beiträge: 965 Wohnort: Upper Austria |
Vielen Dank, Barabbas, für deine Hinweise und Tipps. Ja genau diesen Effekt habe ich gemeint. Ich habe das Progrämmchen probiert. Jetzt müsste ich noch den alten Bildschirminhalt grabben und beim nächsten jeweiligen Aufruf den wiederherstellen, der vorher schwarz oder dunkelgrau war. Aber das finde ich vielleicht noch heraus. |
(Themenstarter)
Anmeldungsdatum: Beiträge: 965 Wohnort: Upper Austria |
Vielleicht könnte man das auch auf Basis eines Bildschirmschoners machen, da müsste ich mir Sourcen besorgen. |
![]() Anmeldungsdatum: Beiträge: 1651 Wohnort: Münster |
Hallo Franz, momentan bin ich leider etwas eingebunden, vll. schau ich mir es die Tage Mal an - zur Zeit finde ich die Xlib doch recht interessant. Eigentlich sollte ja folgendes möglich sein:
Ist natürlich dahingehend anfällig, als dass in dieser Zeit kein anderes Programm an der entsprechenden Stelle neu gezeichnet haben darf - sonst käme es zu Darstellungsfehlern. Aus Gründen der Effizienz könnte man auf alle Fälle aber testen, ob dieses Vorgehen nicht vielleicht zumindest von der Grundidee her zu brauchbaren Ergebnissen führt. Wie auch immer: Ich finde das technisch zwar interessant umzusetzen, bin aber grundsätzlich der Meinung, dass der Energiesparmodus für dich deutlich interessanter ist: Spricht in deinem Szenario etwas dagegen, den Monitor nach 5 Minuten abschalten zu lassen? Ich meine: Im normalen Betrieb verändern sich die Inhalte ja ausreichend oft, als dass kein "Nachleuchten" zu befürchten sein sollte. Auch ein schwarzes Bild als Bildschirmschoner sollte seinen Zweck doch schon erfüllen, oder? Keine Ahnung. Du musst dir halt vor Augen führen, dass das Skript, das du vor Augen hast, permanent grafische Zeichnungen vornimmt - und das muss es auch noch so schnell tun, dass man es optimalerweise gar nicht zur Kenntnis nimmt. Wirklich *effizient* kann das mMn kaum sein. Wie auch immer. Mal schauen, was geht ☺. Besten Gruß, brb |
(Themenstarter)
Anmeldungsdatum: Beiträge: 965 Wohnort: Upper Austria |
Hallo Barabbas, ich habe mir das einmal angesehen. Um das Bild wieder zu restaurieren, habe ich ausser gc_val.function = GXxor; keine Möglichkeit gefunden. Dann wird es nciht schwarz, aber vielleicht ist es besser als nichts. als test habe ich das einmal so // inverse XFillRectangle(display, root_win, gc_line, 50, 50, 600, 400); XFillRectangle(display, root_win, gc_line, 150, 150, 600, 400); XFlush(display); sleep(1); // nur zum test // back inverse = original XFillRectangle(display, root_win, gc_line, 50, 50, 600, 400); XFillRectangle(display, root_win, gc_line, 150, 150, 600, 400); Ich habe leider nicht herausgefunden, wie man den Bildschirmabschnitt "richtig" restoren könnte (also zuerst sichern und dann restore). Aber das würde wahrscheinlich auch auf die Performance gehen. |