IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Afficher un pixel en C++


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 6
    Par défaut Afficher un pixel en C++
    Bonjour à tous,
    Je commence de lire un bouquin (très interessant) sur les algos 2D et 3D et j'aimerais bien mettre en application quelques algos (pr la 2D pr l'instant). Le problème est que je ne sais pas du tout comment afficher un pixel en C++. Donc si qqun pouvait me donner une petite fonction (+ quelques explications) qui gererait ceci ca serait cool, sachant que je ne cherche pas du tout a faire de la performance pr le moment, je veux juste pouvoir voir un truc à l'ecran donc meme si la fonction est un peu "lente" ce n'est pas grave du tout...

    Merci à vous.

  2. #2
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Il faut passer par des bibliothèques externes:
    -la SDL pour la 2D;
    -OpenGL pour la 2D et 3D
    par exemple.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 6
    Par défaut
    J'avais bien vu que sdl permettait de faire du graphisme mais est ce que mon code sera "simple" ?
    Car en C je maîtrise pas grand chose en fait ; je comprend bien les algortihmes car j'ai fait bcp de progra sur calculette mais tout ce qui parle de librairie c'est du chinois pour moi. Je commence à aborder la notion de classe et la progra orientée objet. Voilà, je vais qud meme essayer avc sdl, j'ai vu des tutoriaux ici qui semblent bien...je reviendrais en cas de pb.
    Merci.

  4. #4
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Il y en a d'autres à part la SDL:
    http://c.developpez.com/cours/#tutos-bib

  5. #5
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonjour,

    Le plus simple est de créer une image au format XPM (c'est en fait un simple fichier texte), voici un exemple qui créer une image de l'espace de Mandelbrot en C : mandelbrot.c.

    Sinon la SDL est assez simple à utiliser : Tutoriels SDL.

    Bon courrage

  6. #6
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par abel_b
    Bonjour à tous,
    Je commence de lire un bouquin (très interessant) sur les algos 2D et 3D et j'aimerais bien mettre en application quelques algos (pr la 2D pr l'instant). Le problème est que je ne sais pas du tout comment afficher un pixel en C++.
    Pour la milliardième de fois ça dépend de l'OS; les graphismes dépendent des services de l'OS parce qu'il fait l'interface ( via les drivers ) entre utilisateur/programmeur et matériel..
    un pixel n'est pas du tout affiché de la même manière d'une carte à une autre.
    Sous Windows il faut utiliser des API comme SetPixel

    -> quel IDE , quel compilo , quel OS ?


    Citation Envoyé par seriousme
    Il faut passer par des bibliothèques externes:
    -la SDL pour la 2D;
    -OpenGL pour la 2D et 3D
    par exemple.
    C'est pas fait du tout pour ça et pas du tout nécessaire de passer par des biblios externes !
    SDL c'est pour afficher des bitmaps principalement pour des jeux.
    De manière similaire à DOS ( via surfaces Direct Draw) ou on adressait la mémoire vidéo en assembleur.
    Open GL c'est une API pour de la 3d

    On peut dessiner avec SDL mais ça risque de pédaler + qu'autre chose et on peut pas exploiter ça dans une appli UI avec boutons ,fenètres

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Par défaut
    Citation Envoyé par mat.M
    pas du tout nécessaire de passer par des biblios externes !
    Rien dans le standard C++ ne permet de dessiner un pixel à l'écran, donc il faut bien passer par des bibliothèques externes, comme l'API Windows, WxWidgets ou OpenGL (qui permet aussi très bien de faire de l'affichage 2D).

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Par contre, le SetPixel de l'API Win est d'une lenteur fabuleuse. Ca va pour afficher quelques pixels, mais pour afficher de nombreuses choses (surtout si on veut faire du graphisme en temps réel), ça ne convient pas vraiment. J'en ai déjà fait les frais il y a quelques temps en utilisant cet API.
    Sinon, une solution (sans passer par d'autres librairies) consiste éventuellement à créer un buffer (représentant la mémoire vidéo), puis de dessiner dedans. Ensuite, tout afficher d'un bloc avec une API (je ne sais plus laquelle).

  9. #9
    Membre chevronné
    Avatar de NewbiZ
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2002
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2002
    Messages : 184
    Par défaut
    C'est pas fait du tout pour ça et pas du tout nécessaire de passer par des biblios externes !
    Dans la mesure ou (depuis quelques temps déjà) on a plus accès directement à la mémoire vidéo, il est obligatoire de passer par une API pour communiquer avec la carte graphique...

    Tu as donc 3 choix :
    + Utiliser l'API native de ton OS (ex: win32)
    + Utiliser une API implémentée sur ton système (ex: OpenGL, DX)
    + Utiliser une librairie externe, qui ne sera de toute facon qu'une surcouche à l'API native (ex: SDL, wxWidgets...)

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 6
    Par défaut
    Bonjour à tous et merci pour vos réponses nombreuses.
    Je possède visual C++ 6.0 sous Win XP. Je pense opter pour utiliser sdl qui semble effectivement pratique à utiliser (c'est ce que je recherchais) bien que ça n'aie pas l'air d'être la manière la + performante pour faire du graphisme. Cependant je n'arrive pas à l'installer : j'ai recopié un programme qui affiche un pixel et ça me met toute sorte d'erreur :

    LINK : warning LNK4044: unrecognized option "lmingw32"; ignored
    LINK : warning LNK4044: unrecognized option "lSDLmain"; ignored
    LINK : warning LNK4044: unrecognized option "lSDL/subsystem:windows"; ignored
    pwet.obj : error LNK2001: unresolved external symbol _SDL_WM_SetCaption
    pwet.obj : error LNK2001: unresolved external symbol _SDL_SetVideoMode
    pwet.obj : error LNK2001: unresolved external symbol _SDL_Quit
    pwet.obj : error LNK2001: unresolved external symbol _SDL_GetError
    pwet.obj : error LNK2001: unresolved external symbol _SDL_Init
    pwet.obj : error LNK2001: unresolved external symbol _SDL_WaitEvent
    LIBCD.lib(wwincrt0.obj) : error LNK2001: unresolved external symbol _wWinMain@16
    Debug/pwet2.exe : fatal error LNK1120: 7 unresolved externals
    Error executing link.exe.

    Voilà ceci doit certainement provenir du fait que sdl n'est pas reconnue ou mal installée mais je ne vois pas du tout quoi faire.
    Merci à ceux qui m'aideront.

    PS : j'ai essayé d'utiliser le fichier qui affiche au format xpm mais mon pc ne connaît pas <complex.h> du coup....

  11. #11
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Tu as dû suivre un tutoriel pour MinGW. Pour lier avec une bibliothèque sous VC++ ce ne sont pas du tout les mêmes commandes, il faut aller dans les options de ton projet, éditeur de lien, et spécifier le .lib correspondant.

    Du coup vérifie aussi que tu as bien la version VC++ des bibliothèques de SDL.

    PS : j'ai essayé d'utiliser le fichier qui affiche au format xpm mais mon pc ne connaît pas <complex.h> du coup....
    Compilo trop vieux certainement, essaye de te mettre à jour (VC Express 2005 est gratuit).

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 6
    Par défaut
    Je crois que c'est la bonne version de sdl que j'ai téléchargé : sdl1.2.11-VC6.0...Par contre est ce qu'il fallait aller dans les options/directories pour indiquer le chemin des .lib, des fichiers "include" ?
    - Sinon la version express 2005 est en cours de telechargement, j'essaierai donc de remettre sdl correctement puis je reviendrai en cas de pb.
    Merci beaucoup

  13. #13
    Membre chevronné
    Avatar de NewbiZ
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2002
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2002
    Messages : 184
    Par défaut
    De mémoire, il faut penser à spécifier le type DLL Multithreaded (/DLL ?), rajouter les libs SDL ( SDLmain.lib et SDL.lib, perso je ne les ait pas compilés, je les ait directement téléchargés - package sdl-dev il me semble )
    Si conflits de libs ( selon le type de projet créé ), utiliser /NODEFAULTLIB
    Ce sont quelques astuces de mémoire, si vraiment tu as un problème je pourrai te poster un template de projet préfait.

  14. #14
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par roulious
    Rien dans le standard C++ ne permet de dessiner un pixel à l'écran, donc il faut bien passer par des bibliothèques externes, comme l'API Windows, WxWidgets ou OpenGL (qui permet aussi très bien de faire de l'affichage 2D).
    Merci du conseil mais c'est ce que j'ai écris précisément !


    Citation Envoyé par jeroman
    Par contre, le SetPixel de l'API Win est d'une lenteur fabuleuse. Ca va pour afficher quelques pixels, mais pour afficher de nombreuses choses (surtout si on veut faire du graphisme en temps réel), ça ne convient pas vraiment. J'en ai déjà fait les frais il y a quelques temps en utilisant cet API.
    Sinon, une solution (sans passer par d'autres librairies) consiste éventuellement à créer un buffer (représentant la mémoire vidéo), puis de dessiner dedans. Ensuite, tout afficher d'un bloc avec une API (je ne sais plus laquelle).

    Pour afficher un tampon il faut passer par des fonctionnalités de l'OS; dans le cas de SetPixel on préferra CreateDibSection ou SetDIBBits qui initialise un "buffer" et dans lequel on dessine.


    Citation Envoyé par NewbiZ
    + Utiliser une API implémentée sur ton système (ex: OpenGL, DX)
    + Utiliser une librairie externe, qui ne sera de toute facon qu'une surcouche à l'API native (ex: SDL, wxWidgets...)
    SDL, Direct X voire Open GL ne sont pas trop destinées à dessiner des pixels...
    Parce qu'avec SDL on a juste la fenêtre de l'appli, on peut difficilement mettre des controles utilisateurs ( treeviews, listbox...) sinon ça va ramer...

    Citation Envoyé par abel_b
    Je crois que c'est la bonne version de sdl que j'ai téléchargé : sdl1.2.11-VC6.0...
    Ne pas prendre SDL pour faire du traitement d'image .
    SDL c'est fait pour programmer des jeux des applis multimédias , copier bêtement des images sur des autres ou à l'écran.
    Il faut apprendre la programmation Windows de base la programmation GDI , manipuler les HDC, les bitmaps.

    Par contre si tu veux afficher des polygones en 3d comme tu écris il faut prendre effectivement Open GL ou DIrect X , parce que ce sont des API qui utilisent les fonctions accélératrices de la carte vidéo.
    Dernière modification par mat.M ; 16/08/2006 à 17h38.

  15. #15
    Membre chevronné
    Avatar de NewbiZ
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2002
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2002
    Messages : 184
    Par défaut
    ça va ramer...
    Il faut apprendre la programmation Windows de base la programmation GDI , manipuler les HDC, les bitmaps.
    Je ne suis pas franchement d'accord, le GDI ne peu qu'être plus lent que des API comme OpenGL et DirectX (SDL inclu vu qu'elle utilise OpenGL)
    Parce qu'avec SDL on a juste la fenêtre de l'appli, on peut difficilement mettre des controles utilisateurs
    C'est pas faux, mais rien ne t'empêche (et c'est ce que je fais pour mes éditeurs) d'utiliser une librairie comme wxWidgets pour le fenêtrage et la GUI, et un canvas opengl pour le rendu

  16. #16
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par NewbiZ
    Je ne suis pas franchement d'accord, le GDI ne peu qu'être plus lent que des API comme OpenGL et DirectX (SDL inclu vu qu'elle utilise OpenGL)

    Je suis d'accord mais ( prendre le code source de SDL) cette API utilise des processus en interne qui la rend péniblement lente.
    J'ai regardé le jeu de quelqu'un programmé avec j'obtiens à peine 10frames/s alors que sous Ms-Dos il ya des jeux qui explosent et supers fluides.

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 6
    Par défaut
    Bonjour,
    Je pense que je vais utiliser sdl pour mon problème car je me servirai de choses exposées dans les tutoriaux et peu importe la rapidité pour le moment. Cependant je voudrais que l'on m'explique clairement comment "mettre" sdl (windows Visual C++ 2005 express) car je ne capte pas grand chose à "l'environnement" de travail (je suis habitué aux calculettes moi !! et aux petits programmes console ms-dos).
    Merci à vous.

  18. #18
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Tu as jeté un oeil sur jeux.developpez.com (tutoriels SDL, FAQ SDL, codes sources SDL) ?

Discussions similaires

  1. afficher des pixels sur un qwidget
    Par gedeon555 dans le forum Qt
    Réponses: 4
    Dernier message: 23/03/2007, 16h56
  2. afficher un pixel à l'écran
    Par djamal_internet dans le forum C++
    Réponses: 5
    Dernier message: 15/06/2006, 09h05
  3. [graphics] afficher un pixel
    Par floanne dans le forum 2D
    Réponses: 19
    Dernier message: 20/03/2006, 11h42
  4. [FreePascal] Afficher un pixel en RGB
    Par MatMeuh dans le forum Free Pascal
    Réponses: 23
    Dernier message: 20/05/2005, 01h16
  5. Difficultés pour afficher un pixel à l'écran
    Par Bubonik software dans le forum C
    Réponses: 9
    Dernier message: 17/08/2003, 12h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo