begin process at 2012 02 05 05:03:59
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

Multimédia

 > 

Getpixel et Setpixel trop lents! :(


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Getpixel et Setpixel trop lents! :(

lundi 24 juillet 2006 à 00:03:02 | Getpixel et Setpixel trop lents! :(

Omeya

Bonsoir à tous,
Depuis quelques temps, j'essaye de réaliser un capteur d'écran en temps réel et les seuls instructions que je sais vraiment utiliser sont Getpixel et Setpixel... seulement ils sont décidément beaucoup trop lent pour faire quoi que ce soit de viable.
Savez-vous comment je pourrai faire pour remplacer ces deux instructions par un code beaucoup plus rapide, s'il vous plaît?

//Voici un bout de mon code volontairement tronqué
//(certaines variables sont globales donc non définies ici)
void capture()
{
    int hauteur, longueur;
    hauteur = 200;
    longueur = 250;
    int i, j;
    COLORREF Essaicaptureligne[50000];
    GetCursorPos(&pt);

    dc = GetDC( NULL );
    Rectangle(Essaicaptureligne, pt.x-125, pt.y-100, longueur, hauteur);
    ReleaseDC( NULL, dc );

    dc = ::GetDC(GetDlgItem(Mainbox, IDC_SCREEN));
    for (i = 0; i < hauteur; i++)
    {
        for (j = 0; j < longueur; j++) SetPixel(dc, j, i, Essaicaptureligne[j+(i*longueur)]);
    }
    ReleaseDC( GetDlgItem(Mainbox, IDC_SCREEN), dc );
}

COLORREF Pixel(int x, int y)
{
    COLORREF cr = 0;
    if( NULL != dc ) cr = GetPixel( dc, x, y );
    return cr;
}

void Rectangle(COLORREF *sourceligne, int x, int y, int longueur, int hauteur)
{
    for (int i=0; i<hauteur;i++)
    {
        for (int j=0; j<longueur; j++)
        {
            *sourceligne = Pixel(x+j, y+i);
            sourceligne++;
        }
    }
}
/////////////////////////////////////////

Vous pouvez constater que je tente de mettre les informations obtenues via Getpixel dans un tableau à 2 dimentions pour pouvoir les manipuler. Et là, en l'occurence, je m'en sers pour les afficher dans une picturebox grâce à Setpixel.

Merci par avance pour vos éclaircissements :)
lundi 24 juillet 2006 à 00:07:09 | Re : Getpixel et Setpixel trop lents! :(

Omeya

Pour l'environnement, j'utilise Visual Studio 6 (C++) sous Windows XP SP2.
lundi 24 juillet 2006 à 00:57:28 | Re : Getpixel et Setpixel trop lents! :(

vecchio56

Administrateur CodeS-SourceS
Oui il y a plus rapide: obtenir un pointeur sur une zone mémoire qui contients les pixels
GetDIBits te permet de récupérer cette zone (et remplace donc les GetPixel), puis tu alloues une deuxième zone mémoire de la même taille, sur laquelle tu va travailler. A la fin tu utilises SetDIBits ou SetDIBitsToDevice pour actualiser d'un coup ton HDC
Tu peux aussi expliquer ce que tu veux faire (j'ai un peu de mal a comprendre le code), peut être qu'il y a une facon plus simple de faire

_____________________________________
Un éditeur de ressources gratuit pour Windows

lundi 24 juillet 2006 à 01:18:06 | Re : Getpixel et Setpixel trop lents! :(

Omeya

Ce que je voudrai faire, en réalité, c'est obtenir un aperçu en temps réel (dans une picturebox) du carré qui se trouve autour de ma souris (un carré de taille 200x200 pixels, par exemple, au centre duquel se trouve donc ma souris).

Le HDC pris en compte est celui de l'écran, d'où le GetDC( NULL ).
Si j'ai choisis GetPixel/SetPixel en instruction, c'est parceque j'avais juste besoin d'une zone bien précise de l'écran (relative à la position de la souris), or je ne sais pas le faire avec GetDIBits et encore moins avec SetDIBits ou SetDIBitsToDevice.
Si tu pouvais me donner un exemple concret sur l'utilisation de GetDIBits, SetDIBits et/ou SetDIBitsToDevice, je t'en serai reconnaissant. J'ai tenté pendant 3 ou 4 jours d'utiliser ces instructions sans succès (aucun affichage) même avec la MSDN (que je trouve vraiment mal foutue côté exemples concrets).
lundi 24 juillet 2006 à 07:10:17 | Re : Getpixel et Setpixel trop lents! :(

SnOOpss

La lenteur de getpixel et Setpixel sont tres connues.
>> http://www.cppfrance.com/infomsg_Lenteur2_618463.aspx gros post de quelqu'un qui a eu le mem probleme que toi avec un example de code mais je crois meme que l'auteur en a fait une source.
lundi 24 juillet 2006 à 09:14:55 | Re : Getpixel et Setpixel trop lents! :(

vecchio56

Administrateur CodeS-SourceS
En l'occurence, je crois que la fonction BitBlt devrait suffire, et cette fonction est plus facile d'utilisation que SetDIBits

_____________________________________
Un éditeur de ressources gratuit pour Windows

lundi 24 juillet 2006 à 20:33:20 | Re : Getpixel et Setpixel trop lents! :(

SAKingdom

Membre Club
http://www.cppfrance.com/infomsg_Lenteur2_618463.aspx
Ouais mais regarde les dernières pages. Tout ce qui précède est digne d'un pur débutant :)

Ensuite, la source en question est ici:
http://www.cppfrance.com/listeauteur2.aspx?ID=617077
L'utilisation du buffer pour SetDIBitsToDevice y est expliqué.

BitBlt. Ok mais ce n'est que pour copier un DC mémoire vers le DC principal non? Son DC mémoire devra utiliser quelque chose pour déssiner dedans. Si il utilise SetPixel, ce sera toujours aussi long. Aussi d'après le code actuel, tu n'utilise pas de DC mémoire. Ça doit cintiller affreusement non?

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours un solution
lundi 24 juillet 2006 à 20:37:10 | Re : Getpixel et Setpixel trop lents! :(

SAKingdom

Membre Club
Woups. Mon lien vers la source mène vers ma liste de code.
Voici le vrai lien:
EXEMPLE D'UTILISATION DE SETDIBITSTODEVICE

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours un solution
mardi 25 juillet 2006 à 05:08:59 | Re : Getpixel et Setpixel trop lents! :(

vecchio56

Administrateur CodeS-SourceS
On peut utiliser BitBlt avec le même DC source et destination (à des endroits différents bien entendu)

_____________________________________
Un éditeur de ressources gratuit pour Windows

mardi 25 juillet 2006 à 17:25:25 | Re : Getpixel et Setpixel trop lents! :(

SAKingdom

Membre Club
Oui mais, si il continue à utiliser SetPixel, ce sera toujours aussi long. D'après ce qu'il dit, c'est la lenteur son problème. Je ne vois pas comment BitBlt pourrait régler cela si il continue d'utiliser SetPixel. Pourrais tu m'éclairer un peu s'il te plait?

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours un solution

1 2

Cette discussion est classée dans : int, hauteur, dc, getpixel, setpixel


Répondre à ce message

Sujets en rapport avec ce message

qu'est ce qui va pas dans mon prog ? [ par Laurent0228 ] Salut et merci pour vaut reponse.dans mon prog ci dessous la fontion lir()enregistre les sprites, et la fonction Put() les sort sur ecran reels mais l Probleme avec getpixel [ par SnOOpss ] Bonjour tout le monde !!Voila g voulu modifier une fonction !!void test (HBITMAP hBmp) { if (!hBmp) return 0;........DC hdcc = NULL;hdcc = CreateCompa GetPixel / SetPixel [ par glipper ] Bonjour à tous,j'ai un problème avec la fonction GetPixel. J'appelle une procédure qui doit tester la couleur d'un pixel à l'ecran, mais la valeur ren SetPixel et GetPixel [ par Adeon ] Salut je n'arrive pas a me servir de SetPixel() et GetPixel() en API. Je sais que ca existe mais j'ai des erreurs tout le temps quand je m'en ser. QQ Redimenssion de fenêtre et permanence de son contenu (V C++) [ par TahitiLove ] Bonjour,J'aimerai savoir comment peut on assurer la permanence du contenu d'une fenêtre.Je m'explique, j'ai créer un projet sous Visual C++ utilisant GetPixel [ par elflink ] Bonjour à tous,Je suis actuellement en train de concevoir un logiciel de lecture vidéo et afin de changer la couleur de certains pixels (bleu) en rose Lenteur 3 [ par SAKingdom ] Pour résumé, j'ai fait une petite DLL graphique 2D et j'avais (et j'ai toujours) un problème écransant de lenteur. J'utilisait SetPixel (j'utilise tou Pb d'affichage [ par mrous ] Bonjour,Je souhaite afficher des graphiques ds une boite de dialogue. Pour cela, j'utilise une libraire déja ecrite que j'ai trouvé sur le web cependa dessiner dans une boite de dialog [ par olfa7183 ] salut,je veux creer un compteur qui compte les monnaie inserees.tout d'abord je veux le dessiner puis le programmer.pour le dessin j'ai utilisé le cod migration vers VC++ 2005 [ par dilabo ] BonjourJ'essaie de me remettre au C++ sur lequel je n'ai pas travaillé depuis quelque temps.Mes anciens programmes ont étés écrit avec l'editeur de pr


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,493 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales