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

Windows Discussion :

Filtre d'image


Sujet :

Windows

  1. #1
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Points : 122
    Points
    122
    Par défaut Filtre d'image
    Voila, j'ai fait une fonction pour filtrer les couleurs de l'écran en agissant sur les pixels.

    Le principe est que je sélectionne les pixels du rectangle une par une puis j'y modifie sa couleur en fonction de ce que je veux.

    Ca marche très bien mais le problème c'est que ca flingue mon FPS (c'est pour un jeu).

    Est-ce que quelqu'un connaitrait une méthode pour faire la même chose mais BEAUCOUP plus rapidement.

    Pour ceux qui voudront voir, voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    void PixelShader(HDC hDC, BYTE R, BYTE G, BYTE B, MODEFILTRAGE mode, RECT& zone)
    {
    	int x;
    	int y;
    	BYTE Red;
    	BYTE Green;
    	BYTE Blue;
    	COLORREF cl;
    
    	for &#40;y = zone.top ; y <= zone.bottom ; y++&#41;
    		for &#40;x = zone.left ; x <= zone.right ; x++&#41;
    		&#123;
    			if &#40;mode == MF_RELATIF&#41;
    			&#123;
    				cl = GetPixel&#40;hDC, x, y&#41;;
    
    				Red = 0x000000FF & cl;
    				Green = 0x0000FF00 & cl;
    				Blue = 0x00FF0000 & cl;
    
    				Red = &#40;BYTE&#41;&#40;&#40;float&#41;Red * &#40;float&#41;R / 100&#41;;
    				Green = &#40;BYTE&#41;&#40;&#40;float&#41;Green * &#40;float&#41;G / 100&#41;;
    				Blue = &#40;BYTE&#41;&#40;&#40;float&#41;Blue * &#40;float&#41;B / 100&#41;;
    
    				cl = RGB&#40;Red, Green, Blue&#41;;
    			&#125;
    
    			if &#40;mode == MF_ABSOLUT&#41;
    				cl = RGB&#40;R, G, B&#41;;
    
    			SetPixel&#40;hDC, x, y, cl&#41;;
    		&#125;
    &#125;
    MODEFILTRAGE est un type que j'ai définit
    MF_ABSOLUT modifie directement les couleurs du pixel avec celles entrées.
    MF_RELATIF ne prend que le pourcentage de la couleur.

    Merci d'avance

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 703
    Points
    10 703
    Billets dans le blog
    3
    Par défaut
    GetPixel est assez couteux.
    Il faut créer un bitmap en mémoire, travailler directement dessus, et afficher le bitmap via un blit (bitblt).
    Si c'est pour un jeux, faudrait envisager d'utiliser DirectX aussi, pour encore plus de performances.

  3. #3
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Points : 122
    Points
    122
    Par défaut
    C'est quelles fonctions pour obtenir et modifier la couleur d'un pixel sur une bitmap ?

    J'ai acheté un livre sur DirectX mais c'est beaucoup plus compliqué, alors je vais continuer encore sur Windows et je verrais quand j'aurais plus de connaissance.

  4. #4
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 703
    Points
    10 703
    Billets dans le blog
    3
    Par défaut
    Sur un bitmap DIB y'a pas de fonction d'accès aux pixel vu que tu y as accès directement (tableau d'octet) avec GetDIBits.
    Crée un bitmap avec CreateCompatibleBitmap, et son DC avec CreatecompatibleDC + SelectObject.
    Copie l'écran dans le bitmap via BitBlt, et récupères les données brutes via GetDIBits.
    Puis affiche ton bitmap modifié via un BitBlt sur l'écran.
    Cherche des exemples / libs sur le net:
    http://www.codeproject.com/bitmap/#Bitmaps

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par Azharis
    J'ai acheté un livre sur DirectX mais c'est beaucoup plus compliqué, alors je vais continuer encore sur Windows et je verrais quand j'aurais plus de connaissance.
    Au cas où : penser aux alternatives à l'utilisation de DirectX, peut-être qu'elles paraîtront plus simples. Exemple : http://www.libsdl.org/index.php (qui a entre autres l'avantage d'être portable).
    Mais continuer un peu avec les fonctions GDI le temps d'acquérir de l'expérience est une bonne approche : c'est à pas mesurés qu'on fait les grandes distances.

  6. #6
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Points : 122
    Points
    122
    Par défaut
    Merci à vous deux.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] conv2 filtre sobel+image.jpg
    Par Astraya dans le forum Images
    Réponses: 5
    Dernier message: 17/03/2009, 23h26
  2. Filtre sur image trop importante
    Par lucazzo dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 21/06/2008, 15h23
  3. appliquer des filtres sur image
    Par MANU_2 dans le forum Débuter
    Réponses: 1
    Dernier message: 10/01/2008, 12h02
  4. Filtres sur image
    Par ironzorg dans le forum SDL
    Réponses: 12
    Dernier message: 08/07/2007, 15h36
  5. Filtre sur image compatible I.E
    Par sacados1 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 13/03/2007, 13h57

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