Frage

Wie kann ich einen Bildschirmschoner in C ++ zu machen, die auf dem Fade-Out?

ein Bild herein und heraus an zufälligen Stellen auf dem Bildschirm mit einer bestimmten Zeitverzögerung schwindet

Multimonitor-Unterstützung wäre genial.

Wenn Sie einen funktionierenden Code haben oder wissen, wo ich es bekommen kann, wäre es toll. zeigen Sie mir sonst in die richtige Richtung. Ich bin auf der Suche nach einer Methode, die einen glatten und nicht laggy og flickery verblassen hat. Der Bildschirmschoner ist für Windows XP.

Ich weiß nicht, C ++, aber ich weiß, AS3, Javascript und PHP. Also ich habe gehofft, etwas von diesem Wissen zu C ++ beziehen.

Was soll ich es kompilieren verwenden?

War es hilfreich?

Lösung

Als erstes, wenn Sie beginnen, die in C ++, nicht mit einem Windows-spezifischen Compiler wie Visual C ++ starten. Schnappen Sie sich eine schöne Cross-Plattform-IDE, die mit einem Compiler wie Eclipse kommt oder Code :: Blocks . Wie bei jedem Projekt, werden Sie wollen es aufgeteilt in kleinere Aufgaben auf Sie in Stufen abschließen können. Klingt wie Sie ein paar Hürden haben.

  1. Mangel an C ++ Kenntnisse (wir alle hier einmal waren)
  2. Der Mangel an Wissen über Bilder (sehr verbreitetes Leiden)
  3. Der Mangel an Erfahrung (wir werden daran arbeiten)

Lassen Sie sich nicht andere entmutigen. Sie können dies tun, und wahrscheinlich schneller, als man für möglich halten. DO ein oder zwei Bücher über C ++ lesen, können Sie durch für ein Projekt erhalten, ohne viel zu wissen, aber Sie werden frustriert oft bekommen. Lassen Sie uns Ihr Projekt in eine Reihe von kleinen Zielen aufzubrechen. Wie Sie jedes Ziel, Ihr Vertrauen in C ++ vervollständigen steigen.

  1. Bild Blending
  2. Windows-Bildschirmschoner w / Multi-Monitor-Unterstützung
  3. Bildschirm Leinwand (directx, opengl, Bitmaps?)
  4. Timer

Lassen Sie uns zunächst auf das Problem der Bildmisch aussehen. Ich gehe davon aus, dass Sie wollen, um das Bild in Frage einfügen „verblassen“, was auch immer Windows-Hintergrund Sie aktiv sind. Wenn Sie einen einfarbigen Hintergrund haben werden, können Sie es einfach tun, indem Sie die Alpha-Transparenz des Bildes in Frage zwischen Leinwand Auffrischungen zu verändern. Im Grunde wollen Sie die Farbwerte jedes Pixels in den beiden Bildern auf Ihrem Auffrischzeitgeberereignis Basis mitteln. In direkten Begriffen die rot, grün zu finden und blaue Pixelelemente für jedes resultierendes Pixel (P3)

N = Timer Ticks pro Intervall (Sekunden / Millisekunden / etc)
T = Ticks, die dieses Intervall
aufgetreten sind P1r = red Pixelelement aus Bild 1 | P2r = red Pixelelement aus Bild 2
P3R = resultierendes rotes Pixelelement für gemischtes Bild
P1g = grün Pixelelement aus Bild 1 | P2g = grün Pixelelement aus Bild 2
P3G = resultierendes Grünpixelelement für gemischtes Bild
P1b = blue Pixelelement aus Bild 1 | P2b = blue Pixelelement aus Bild 2
P3b = resultierendes blaues Pixelelement für gemischtes Bild

P3r = ((T/N * P1r) + ((N-T)/N * P2r))/2
P3g = ((T/N * P1g) + ((N-T)/N * P2g))/2
P3b = ((T/N * P1b) + ((N-T)/N * P2b))/2

Lassen Sie uns auf das Problem von Windows Bildschirmschoner aussehen Jetzt und Multi-Monitor-Unterstützung. Diese sind wirklich zwei verschiedene Probleme. Windows-Bildschirmschoner sind wirklich nur reguläre EXE kompilierte Dateien mit einer bestimmten Callback-Funktion. Sie können Ihre Bildschirmschoner-Funktionen auf dem Netz zum Einrichten viele Tutorials. Multi-Monitor-Unterstützung tatsächlich ein Problem sein, wenn Sie Ihre Bildschirm-Leinwand aufgebaut, was wir als nächstes besprechen werden.

Wenn ich auf den Bildschirm Leinwand beziehen, ich beziehe mich auf den Bereich, auf dem das Programm ausgibt visuellen Daten. Alle Bild Rendering-Anwendungen oder Tutorials werden grundsätzlich auf das gleiche Konzept beziehen. Wenn Sie dies besonders interessant finden, bitte ein Trainee-Programm oder Learning-Kurs in Computer Vision betrachten. Vertrauen Sie mir, Sie werden es nicht bereuen. Wie dem auch sei, in Anbetracht der grundlegenden Natur der App ich gegen die Verwendung von OpenGL oder DirectX reccommend würde, nur weil jede ihre eigene Schicht von App-spezifische Kenntnisse haben Sie erwerben müssen, bevor sie nützlich sind. Auf der anderen Seite, wenn Sie 3D-Nettigkeiten wie die doppelte Pufferung und gpu Offloading in integrierten wollen, würde ich mit openGL (mehr plattformunabhängig) gehen. Viel Spaß Bildbibliotheken kommen als gimmes auch.

Wie für Multi-Monitor-Unterstützung, ist dies eine schwierige, aber nicht komplizierte Frage. Du wirst im Grunde nur Ihre Leinwand Grenzen (Bildschirm Grenze), um die Geometrie Ihrer mehr Monitore entsprechen. Sollte kein Problem mit mehreren Monitoren der gleichen Auflösung sein kann knifflig mit mismatched Monitorauflösungen (möglicherweise Leinwand Bereiche haben nicht auf dem Bildschirm angezeigt usw. Es gibt auch bekannte Algorithmen und Abhilfen für diese Probleme, aber vielleicht ist dies über den Rahmen diese Frage.

Finally in Bezug auf die Timer erforderlich, sollte dies der einfachste Teil sein. Windows und Linux Griff Zeit in ihrem eigenen seltsamen Wegen (warum MS nicht implementieren strptime), wenn Sie also in Portabilität interessieren würde ich eine 3rd-Party-Bibliothek verwenden. Ansonsten benutzen Sie einfach die Fenster settimer () Basisfunktionalität und haben Ihr Bild in der Callback-Funktion wiedergegeben.

Fortgeschrittenes Thema: Hey, wenn Sie das hier lesen gibt es eine Reihe von interessanten algorithmischen Verbesserungen sind Sie in diesem Programm machen kann. Zum Beispiel mit dem Timer eine Reihe Quanten pro Sekunde abgehend, können Sie die ersten paar gemischten Bilder zwischenzuzuspeichern und eine Verarbeitungszeit (unsere Augen sind nicht sehr gut darin zu bemerken Unterscheidung zwischen Farbverläufe zu ändern) speichern. Wenn Sie openGL verwenden, können Sie Sätze von gemischten Bilder als Anzeigelisten-Cache (Gotta verwenden, um alle, die Grafikkartenspeicher für etwas richtig?). Fun stuff, viel Glück!

Andere Tipps

  

„Ich habe nicht C ++ wissen, aber ich weiß, AS3, Javascript und PHP. Also ich habe gehofft, etwas von diesem Wissen zu C beziehen ++.“

Oh Junge, ich nehme an, du wirst überrascht sein. Um zu erfahren, C ++:

  • Kaufen Sie mindestens ein oder zwei sehr gute Bücher (siehe hier ). Kaufen Sie keine Bücher, die nicht sehr gut sind. Sie werden dich lehren Gewohnheiten, die Sie später, um weitere Fortschritte zu machen, müssten verlernen.
  • Expect mit mit viel Lesen zwischen Schreiben viel Hands-on-Code zu tun. In den ersten Wochen wird der Compiler spucken Legionen von unverständlichen Fehlermeldungen an Sie, wird Ihr Code abstürzt halten, und erfahrene C ++ Programmierer auf dem Code suchen, werden ihre Hände in Ekel erbrechen. Und es ist immer Ihre Schuld.
  • viel Zeit planen zu lernen. Und ich meine eine echte Menge . Egal, wie viel Zeit Sie widmen, wird es zumindest ein paar Monate dauern, bis Sie sich vom „Dummy“ auf „Anfänger“ aktualisieren.
  • Stellen Sie sich vor ein paar Jahren, um eine zu werden, um es zu hämmern mit echten Profis, ständig Bücher und Artikel zu lesen, viel Zeit in Newsgroups und Diskussionsforen widmen, von anderen zu lernen, hämmert Kopf gegen jede Mauer um Ihre Schreibtisch.
  • Seien Sie bereit, etwas zu lernen, zumindest einmal nicht gekannt haben, bevor jede Woche auch nach einem Jahrzehnt der Programmierung in C ++ für ein Leben.
  • Nur für einen Moment, stelle ich mir das nicht genug betonen könnte.

Bearbeiten Klärungs : Ich habe bis gestimmt beiden Hunter Davis' und Antworten des Elemental, weil sie sehr gut sind, so ziemlich auf den Punkt, und im allgemeinen ist die Förderung von mir unterstützt trotz dort mein rant. In der Tat habe ich nicht daran zweifeln, dass viele sind in der Lage, gemeinsam etwas in C / C ++ hacken, wenn sie viel von C ++ nicht wissen, ein Skelett Beispiel auch dann, wenn tatsächlich gegeben. Gehen Sie voran und versuchen Sie, es gibt eine gute Chance, werden Sie mit einem Bildschirmschoner in angemessener Zeit kommen. Aber. In der Lage zu „etwas zusammen in C / C ++ Hack“ ist weit von „C gelernt ++“. (Und ich meine sehr weit.)

C ++ ist eine unglaubliche Komplex, bedeutet, und hartnäckiges Tier. Ich halte auch fast atemberaubend schön, aber dadurch, dass es wahrscheinlich die Aussicht von einem sehr hohen Berg spiegelt: Es ist ziemlich schwer auf den Punkt zu gelangen, wo Sie die Schönheit zu schätzen sind in der Lage.

C ++ ist eine komplexe Sprache und alles, was sbi gibt wohl wahr (auf jeden Fall nach 10 Jahren der kommerziellen C ++ Programmierung gibt es einige noch zu lernen), aber ich denke, dass, wenn Sie in einer anderen Sprache sicher sind, soll es nur ein paar nehmen von Tage: a) Installieren Sie eines der Compiler hier erwähnt (ich würde vorschlagen, VC als schnell bei Windows-Programmierung) b) Bestimmen Sie einig Beispiel-Code von einem Bildschirmschoner, der etwas einfach mit dem Windows-GDI tut (es gibt einige Codes innerhalb der MS-Dokumentation auf Bildschirmschoner) Ändern c) diesen Code zu tun, was Sie wollen.

Im Hinblick auf die beschränkte Anforderung ich glaube, Sie werden feststellen, dass das Fenster GDI ++ Bibliotheken genügend Leistung haben die Alpha zu tun verblasst Sie benötigen reibungslos.

ich bei microsoft c aussehen würde ++ auszudrücken. Es ist kostenlos und ziemlich fähig. Sie können sie hacken müssen, oder eine ältere Version erhalten, auf nicht verwalteten ausführbare Dateien erzeugen.

Es gibt eine Menge von Tutorials für den Rest verfügbar

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top