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

WinDev Discussion :

DIB tutor (remplacement de couleurs)


Sujet :

WinDev

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut DIB tutor (remplacement de couleurs)
    Ceci est un projet WD17, qui peut fonctionner soit en mode 32-bit, soit en mode 64-bit.
    (C'est la mise-à-jour d'un projet WD9 écrit en 2006.)

    Il montre l'utilisation de 3 techniques différentes pour remplacer tous les pixels d'une certaine couleur par une autre.
    1 - Avec les fonctions dPixelColor/dPoint du WLangage.
    2 - Avec l'API bas niveau dans la procédure ReplaceColor.
    3 - Avec la fonction ZI_ReplaceRGBColor de la bibliothèque graphique GDImage.

    La configuration permet de tester le code soit en 32-bit, soit en 64-bit.
    La version 64-bit est configurée par défaut.
    Si vous voulez tester en mode 32-bit, vous devez remplacer la constante GDImage = "GDImage64" par GDImage = "GDImage".

    Selon qu'on utilise l'API GetObjectA en mode 32-bit ou 64-bit, il est impératif d'ajuster l'alignement de la structure BITMAP car l'alignement est effectué sur 4-byte en 32-bit, et sur 8-byte en 64-bit.
    Pour contourner ce problème j'utilise 2 structures différentes, BITMAP en 32, et BITMAP64 en 64 (membre supplémentaire dummy de 4-byte pour passer à une taille de 32 octets au lieu des 28 utilisés en 32-bit).
    Ce qui se traduit dans la procédure ReplaceColor, par le code qui figure ci-dessous pour gérer les 2 configurations.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    		IF In64bitMode() THEN
    			GetObject(hBitmap, &bm64)
    			bmW = bm64.bmWidth; bmH = bm64.bmHeight
    			bmBPix = bm64.bmBitsPixel
    		ELSE
    			GetObject(hBitmap, &bm)
    			bmW = bm.bmWidth; bmH = bm.bmHeight
    			bmBPix = bm.bmBitsPixel
    		END
    Le temps utilisé par chacune des 3 versions est mesuré avec précision grâce à l'utilisation des API QueryPerformanceFrequency et QueryPerformanceCounter.

    Pour tester réellement la vitesse des 3 solutions proposées, amusez-vous a cliquer plusieurs fois sur chaque bouton pour voir la réactivité de l'affichage.

    Capture d'écran

    Nom : DIBtutor.jpg
Affichages : 487
Taille : 122,3 Ko

    ...
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    J'ai modifié le code, de façon a toujours forcer l'affichage lorsqu'on presse le bouton "WD-paint".

    QueryPerformanceFrequency était exécuté dans chaque procédure, ce qui est une erreur car la fréquence doit être calculée une seule fois pas session, il a donc été déplacé au début du code de la fenêtre.

    Je pense que les piètres performances de la fonction dPaint utilisée par WinDev provient du fait qu'elle est basée sur l'encapsulation des API GetPixel/SetPixel connus pour leur lenteur.

    Note : Le fichier ZIP qui est attaché au premier post de ce sujet a été mis-à-jour.

    ...

Discussions similaires

  1. [GD] Remplacer une couleur
    Par Roromix dans le forum Bibliothèques et frameworks
    Réponses: 11
    Dernier message: 23/06/2008, 19h51
  2. Réponses: 5
    Dernier message: 30/05/2007, 11h53
  3. Remplacer une couleur par une autre couleur
    Par brice01 dans le forum SDL
    Réponses: 6
    Dernier message: 25/02/2007, 15h38
  4. [C#] Comment supprimer/remplacer une couleur d'une image ?
    Par rannounna dans le forum Windows Forms
    Réponses: 1
    Dernier message: 09/05/2006, 12h37
  5. [VB.NET] Comment remplacer une couleur par une autre?
    Par jazz matazz dans le forum VB.NET
    Réponses: 5
    Dernier message: 11/02/2006, 14h29

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