SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 2009
-
13 déc. 2005 à 15:21
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 2009
-
14 avril 2006 à 04:52
Pour résumé, j'ai fait une DLL de graphisme 2D qui marche très bien. Le seul problème c'est que c'est très lent. J'utilisais SetPixel pour afficher les pixels (voir procédure dans la question lenteur) On ma suggéré d'utiliser BitBlt. Mais, corrigez moi si je me trompe, BitBlt n'est pas fait pour créé des pixels. Il ne fait que les afficher à l'écran. Donc ma question reviend à: connessez vous un moyen pour créé des pixels à l'écran sans faire ramé l'ordi. En gros sans utiliser SetPixel.
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 13 déc. 2005 à 16:35
Salut,
Moui, mais si tu travailles dans un DC mémoire avec SetPixel(), et
qu'ensuite tu copies tout le DC mémoire vers le DC fenetre avec
BitBlt(), c'est pas plus rapide a l'affichage ?
kortin
Messages postés65Date d'inscriptiondimanche 27 juillet 2003StatutMembreDernière intervention21 avril 2006 13 déc. 2005 à 16:38
ouai, aardman a raison, c'est plus rapide, ça évite de refaire toutes les opérations de dessin.
C'etait pour qu'il comprenne bien qu'il devait agir sur le DC de la fenêtre.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 13 déc. 2005 à 16:40
Je connais pas wxWidget. Mon DLL créé des pixels avec SetPixel. Mais SetPixel fais ramé le programme. Ma question est: connaissez vous une meilleur façon d'utiliser SetPixel ou bien une façon sans SetPixel.
P.S. HDC est une structure(typedef struct HDC)?
Vous n’avez pas trouvé la réponse que vous recherchez ?
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 13 déc. 2005 à 16:43
D'accord mais j'utiliser déja BitBlt pour afficher les pixels créé par SetPixel. Je ne connais pas d'autre façon. Mais ça rame quand même. Selon ce que vous dite, c'est SetPixel le problème. Comment le corriger?
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 13 déc. 2005 à 20:09
D'accord pour ça mais, pour moi, l'image est créé par SetPixel. J'utilise SetPixel pour créé une image sur une interface vierge. J'utilise pas SetPixel pour modifier une image existant. C'est SetPixel qui créé tout. Ya pas de bitmap externe. BitBlt ne fait qu'afficher le résultat. Donc selon cette information, y a t-il un moyen de ne pas faire ramer l'ordi
SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013 13 déc. 2005 à 22:40
par exemple en utilisant SetDIBitsToDevice() pour le copier dans un DC qui lui pourra utilisé avec la commande bitblit().
En resumé les API sont utilisé avant la boucle et apres la boucle.A
l'interieur de ta boucle uniquement des operation avec des pointeurs
donc tres rapide.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 3 avril 2006 à 19:36
Je vien ENFIN de comprendre comment marchais SetDIBitsToDevice mais je ne comprend pas la structure
tab[x+y*largeur]=(LPDWORD)col
langueur et col, c'est quoi ça. J'veux dire, je comprend x et y, c'est les coordonnés mais pas largueur. J'ai une petit idée de ce quoi est col mais je voudrais en être sûre.
___________________________________________
Les plus grands esprits trouvent toujours une solution
SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013 4 avril 2006 à 20:06
Ben en fait c'est un tableau a une dimension en fait c'est comme si je
faisait tab[x,y]. Mais comme on se trouve avec un tableau a une
dimension j'utilise cette astuce tres frequemment utilisé.
tableau de 5 sur 5 en 2 dimension : tab(2,3) = 8
tableu de 5 sur 5 en 1 dimension tab(2 + 3 * 5 ) = 8
SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013 5 avril 2006 à 19:26
C'etait juste un exemple pris au pif; ca peut etre ce que tu veut comme
le nombre de pomme dans une etagere de x colonnes sur y rangées.C'est
pour te montrer 2 tableau ( un a une dimension et un autre a deux) mais
qui on les memes données dedans
SnOOpss
Messages postés571Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 5 décembre 2013 6 avril 2006 à 19:29
Je crois que c'est plutot 32 bit 16 millions de couleurs la plus grosse c'est FFFFFF. Sinon c'est bien ca.
En fait si on a un pixel rouge (FF0000) suivi dun pixel bleu(0000FF)
dans ton tableau de BIT tu auras les valeurs
tab()=...,FF,00,00,00,00,FF,...
En fait si tu veut aller plus vite tu peut y lire directement un DWORD
tu lit directement les 3 octets (mais apres il faut penser a se decaler
de 3 valeurs a chaque fois), tout depend de si tu veut travailler sur
les composante rgb ou recuperer la couleur du pixel.
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 6 avril 2006 à 20:56
J'essais de comprendre (j'te jure) mais j'ai beaucoup de difficulter. Ce que je cherche c'est comment écrire directement dans la mémoire vidéo ou avec SetDIBitsToDevice pour ne pas être obligé d'utiliser SetPixel. Tu comprend? Peut tu me faire un exemple d'un programme dessinant quelque point en couleur dans sa fenêtre avec ta technique et grâce a SetDIBitsToDevice stp?
___________________________________________
Les plus grands esprits trouvent toujours une solution