none
Direct2D - kleines Problem mit "Farbresten" RRS feed

  • Frage

  • Ich habe einen kleinen Bildschirmschoner entwickelt, der Direct2D verwendet. Dabei werden regelmäßig Farbpunkte auf den Bildschirm gezeichnet. Durch die Änderung der Position dieser Punkte ergeben sich Linien.

    Darüber hinaus verdunkle ich in jedem Frame den aktuellen Bildschirminhalt, sodass ältere Farbpunkte bei jeden Frame dunkler werden, sodass es aussieht, dass die Linien dunkler werde und schließlich ganz verschwinden, und zwar so:

    static D2D_COLOR_F clear_color = {0.0f, 0.0f, 0.0f, 0.1f};
    pBlackBrush->SetColor(clear_color);
    pRT->FillRectangle(D2D1::RectF(0.0f, 0.0f, width, height), pBlackBrush);
    

    Und hier habe ich ein kleines Problem.

    Für bereits sehr dunkle Farben auf dem Bildschirm reicht scheinbar der alpha-Wert in clear_color nicht aus, um komplettes Schwarz zu erzeugen, sodass man auf dem Bildschirm bleibende Streifen sieht, d.h. sehr dunkle Farben werden NICHT bis zu schwarz abgedunkelt, sondern bleiben erhalten.

    Welche Möglichkeiten habe ich nun, den Bildschirminhalt so zu manipulieren, dass nur sehr dunkle Farben auf Schwarz gesetzt werden, um diese Streifen zu eliminieren? Alle Farben über einem bestimmten Helligkeitswert sollen dabei nicht verändert werden.

    Für Tipps wäre ich dankbar!

    • Bearbeitet FernandoRey Mittwoch, 29. Dezember 2010 17:59 Formatierung
    Mittwoch, 29. Dezember 2010 17:58

Antworten

  • Ich denke der Effekt ist je nach Grafikkartentreiber und Hardware immer unterschiedlich.

    Du könntest dafür sorgen daß immer ein Hintergrund mit den Farbwert {0.1f, 0.1f, 0.1f, 1.0f} gezeichnet wird.

    Dafür müsstest du den gesamten Zeichenvorgang aber in eine art Backbuffer auslagern (wenn Du das eh nicht schon machts) und wirklich zwichen Vordergrund und Hintergrund unterscheiden.

    Falls es übrigens noch nicht aufgefallen ist: Abgesehen von Rendersequenzen ist der Hintergrund in Computer-Spielen (auch Ältere!) auch nie ganz schwarz. Der Eindruck entsteht immer nur, weil das extrem dunkle grau bildschirmfüllend ist und auch konstant gehalten wird. ;)

    Freitag, 31. Dezember 2010 11:43