Question

Comment puis-je créer un économiseur d'écran en C ++ qui permet d'afficher et de masquer une image à des emplacements aléatoires de l'écran avec un délai spécifié sur la fermeture en fondu?

Le support de plusieurs moniteurs serait génial.

Si vous avez un code fonctionnel ou savez où je peux l'obtenir, ce serait génial. Sinon, pointez-moi dans la bonne direction. Je cherche une méthode qui a un fondu lisse et non laggy. L'économiseur d'écran est pour Windows XP.

Je ne connais pas le C ++, mais je connais AS3, Javascript et PHP. J'espérais donc relier certaines de ces connaissances au C ++.

Que dois-je utiliser pour le compiler?

Était-ce utile?

La solution

Tout d’abord, si vous débutez en C ++, ne commencez pas par un compilateur spécifique à Windows, tel que Visual C ++. Saisissez un bel IDE multiplate-forme fourni avec un compilateur comme eclipse ou code :: blocks . Comme tout projet, vous souhaiterez le scinder en tâches plus petites que vous pourrez effectuer par étapes. On dirait que vous avez quelques obstacles.

  1. Manque de connaissances en C ++ (nous étions tous ici une fois)
  2. Manque de connaissances sur les images (affliction très commune)
  3. Manque d'expérience (nous allons travailler dessus)

NE laissez PAS les autres vous décourager. Vous POUVEZ faire cela, et probablement plus vite que vous ne le pensez possible. Lisez un ou deux livres sur le C ++, vous pouvez vous débrouiller pour un projet sans en savoir beaucoup, mais vous serez frustré souvent. Divisons votre projet en un ensemble de petits objectifs. Au fur et à mesure que vous complétez chaque objectif, votre confiance en C ++ augmentera.

  1. Fusion des images
  2. Économiseur d'écran Windows avec prise en charge de plusieurs moniteurs
  3. Toile d'écran (directx, opengl, bitmaps?)
  4. Minuteries

Tout d’abord, examinons le problème de la fusion d’images. Je suppose que vous voudrez "se faner" l'image en question dans n'importe quel fond de fenêtres que vous avez actif. Si vous avez un arrière-plan de couleur unie, vous pouvez le faire en modifiant la transparence alpha de l'image en question entre les actualisations de la zone de travail. Essentiellement, vous souhaiterez faire la moyenne des valeurs de couleur de chaque pixel dans les deux images en fonction de votre compteur de rafraîchissement. En termes plus directs, recherchez les éléments de pixels rouge, vert et bleu pour tout pixel résultant (P3)

N = ticks du minuteur par intervalle (secondes / millisecondes / etc)
T = ticks survenus pendant cet intervalle
P1r = élément de pixel rouge de l'image 1
P2r = élément de pixel rouge de l'image 2
P3r = élément de pixel rouge résultant pour l'image fusionnée
P1g = élément de pixel vert de l'image 1
P2g = élément de pixel vert de l'image 2
P3g = élément de pixel vert résultant pour l'image fusionnée
P1b = élément de pixel bleu de l'image 1
P2b = élément de pixel bleu de l'image 2
P3b = élément de pixel bleu résultant pour l'image fusionnée

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

Examinons maintenant le problème des économiseurs d'écran Windows et de la prise en charge de plusieurs moniteurs. Ce sont vraiment deux problèmes distincts. Les économiseurs d'écran Windows ne sont en réalité que des fichiers compilés .exe ordinaires dotés d'une fonction de rappel. Vous pouvez trouver de nombreux tutoriels sur la configuration de vos fonctions d’économiseur d’écran sur le net. La prise en charge de plusieurs moniteurs sera réellement une préoccupation lors de la configuration de votre canevas d’écran, dont nous parlerons ensuite.

Lorsque je me réfère au canevas d’écran, je fais référence à la zone sur laquelle votre programme produira des données visuelles. Toutes les applications de rendu d'image ou les tutoriels feront essentiellement référence à ce même concept. Si vous trouvez cela particulièrement intéressant, veuillez envisager un programme d'études supérieures ou un cours d'apprentissage en Vision par ordinateur. Croyez-moi, vous ne le regretterez pas. Quoi qu'il en soit, compte tenu de la nature fondamentale de votre application, je vous déconseille d'utiliser OpenGL ou DirectX, simplement parce que chacun possède sa propre couche de connaissances spécifiques à l'application que vous devez acquérir avant d'être utiles. D'un autre côté, si vous voulez des fonctions 3D intégrées telles que le double tampon et le déchargement de gpu, je choisirais openGL (plus agnostique pour les plates-formes). De nombreuses bibliothèques d'images amusantes sont également proposées.

En ce qui concerne le support multi-écrans, il s’agit d’un problème épineux, mais pas compliqué. En gros, vous allez simplement définir les limites de votre canevas (limites de l'écran) afin qu'elles correspondent à la géométrie de vos multiples moniteurs. Cela ne devrait pas être un problème avec plusieurs moniteurs de la même résolution, cela peut devenir délicat avec des résolutions de moniteur incompatibles (certaines zones de fond ne sont peut-être pas affichées à l'écran, etc.). de cette question.

Enfin, en ce qui concerne les minuteries requises, cela devrait être la partie la plus facile. Windows et Linux gèrent le temps de manière étrange (POURQUOI MS n'implémente-t-il pas STRPTIME), donc si vous êtes intéressé par la portabilité, j'utiliserais une bibliothèque tierce. Sinon, utilisez simplement la fonctionnalité de base windows settimer () et faites que votre image soit rendue dans la fonction de rappel.

Sujet avancé: Hé, si vous lisez encore, il existe un certain nombre d’améliorations algorithmiques intéressantes que vous pouvez apporter à ce programme. Par exemple, si votre minuterie dépasse de quelques secondes chaque seconde, vous pouvez mettre en cache les premières images mélangées et gagner du temps de traitement (nos yeux ne sont pas très efficaces pour distinguer les variations de dégradés de couleurs). Si vous utilisez openGL, vous pouvez mettre en cache des ensembles d’images combinées sous forme de listes d’affichage (vous devez utiliser toute la mémoire de la carte graphique pour obtenir quelque chose de juste?). Choses amusantes, bonne chance!

Autres conseils

  

"Je ne connais pas le C ++, mais je connais AS3, Javascript et PHP. J'espérais donc relier certaines de ces connaissances au C ++. "

Oh mon Dieu, je suppose que vous allez être surpris. Pour apprendre le C ++:

  • Achetez au moins un ou deux très bons livres (voir ici ). Ne pas acheter des livres qui ne sont pas très bons. Ils vous apprendront des habitudes que vous devrez désapprendre plus tard pour pouvoir progresser.
  • Attendez-vous à avoir à écrire beaucoup de code avec beaucoup de lecture entre les deux. Au cours des premières semaines, le compilateur vous enverra des tonnes de messages d'erreur incompréhensibles, votre code continuera de planter et les programmeurs C ++ chevronnés examinant votre code lèveront leurs mains avec dégoût. Et c'est toujours votre faute.
  • Prévoyez beaucoup de temps pour apprendre. Et je veux dire beaucoup . Peu importe le temps que vous y consacrez, il faudra au moins deux mois avant de passer à la version "factice". à "novice".
  • Imaginez avoir à marteler pendant quelques années pour devenir un véritable professionnel, en lisant constamment des livres et des articles, en consacrant beaucoup de temps aux groupes de discussion et aux forums de discussion, en apprenant des autres, en vous cognant la tête contre tous les murs qui entourent votre bureau.
  • Préparez-vous à apprendre quelque chose que vous n'avez pas encore connu au moins une fois par semaine, même après une décennie de programmation en C ++ pour gagner sa vie.
  • Juste un instant, imaginez que je n’exagère pas cela.

Modifier pour clarification : J'ai voté à la fois les réponses de Hunter Davis et d'Elemental, car elles sont très bonnes, très pertinentes et en général, les encouragements sont soutenus par moi malgré mon discours là-haut. En fait, je ne doute pas que beaucoup sont capables de pirater quelque chose ensemble en C / C ++ quand on leur donne un exemple squelette, même s'ils ne connaissent pas beaucoup le C ++. Allez-y et essayez, il y a de fortes chances que vous obteniez un économiseur d'écran dans un délai raisonnable. Mais. Être capable de "pirater quelque chose ensemble en C / C ++" est loin d’avoir "appris le C ++". (Et je veux dire très loin.)

C ++ est une incroyable bête complexe, méchante et obstinée. Je la considère également comme une beauté à couper le souffle, mais elle reflète probablement la vue d’une très haute montagne: il est difficile d’arriver au point d’apprécier la beauté.

C ++ est un langage complexe et tout ce que sbi indique est probablement vrai (certainement après 10 ans de programmation C ++ commerciale, il en reste encore à apprendre) MAIS je pense que si vous êtes confiant dans un autre langage, il ne devrait prendre que quelques jours à: a) Installez l'un des compilateurs mentionnés ici (je suggérerais VC comme un moyen rapide pour la programmation Windows) b) Trouvez un exemple de code d’un économiseur d’écran qui effectue quelque chose de simple à l’aide de Windows GDI (la documentation de MS contient des codes sur les économiseurs d’écran) c) Modifiez ce code pour faire ce que vous voulez.

En ce qui concerne vos besoins limités, je pense que vous constaterez que les bibliothèques GDI ++ de Window disposent de suffisamment de puissance pour effectuer les fondus alpha dont vous avez besoin.

Je regarderais Microsoft c ++ express. C'est gratuit et assez capable. Vous devrez peut-être le pirater ou obtenir une version plus ancienne pour produire des exécutables non gérés.

Il existe de nombreux didacticiels disponible pour le reste

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top