Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 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 | | Calendrier |
|
|
| KGF_dll - nouvelles versions | |
|
+13The Gamer Nardo26 silverman Minibug Pedro mindstorm pascal10000 Jicehel papydall Jean Claude JL35 Yannick Klaus 17 participants | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 8 Oct 2015 - 2:19 | |
| Nouvelle version: KGF.dll V5.09 du 08/10/2015Nouveautés: - nouvelle fonction IsPointInPolygon - nouvelle fonction IsPointInCircleModules modifiés: KGF.dll KGF.chmLa doc, l'aide en ligne et les sources sont à jour. On avait déjà la fonction IsPointInRectangle (dans la section 'Gestion de la souris"). Les deux nouvelles fonctions complètent cette fonctionnalité, avec la possibilité de tester sur un polygone fermé (non croisé) jusqu'à 100 coins, ou un cercle d'un rayon quelconque. Voici une démo: choisir entre polygone et cercle, puis cliquez dans l'écran, dedans ou dehors: - Code:
-
' test_IsPointInPolygon.bas
label click0, poly, cercle
dim i%,x%,y%,n%, res%, form%
data 7,100,30,180,150,120,300,30,60,90,400,250,80,100,30
full_space 0 on_click 0,click0
dlist 1
button 2 : caption 2,"Polygone" : on_click 2,poly button 3 : caption 3,"Cercle" : on_click 3,cercle : top 3,25
dll_on "KGF.dll" end
poly: color 0,255,255,255 restore read n% clear 1 for i%=1 to n% read x% read y% item_add 1,str$(x%)+","+str$(y%) if i%=1 2d_poly_from x%,y% else 2d_poly_to x%,y% end_if next i% form% = 0 return
cercle: color 0,254,255,255 2d_circle 300,300,50 form% = 1 return
click0: x% = mouse_x_left_down(0) y% = mouse_y_left_down(0) select form% case 0 res% = dll_call3("IsPointInPolygon",x%,y%,object_internal(1)) case 1 res% = dll_call5("IsPointInCircle",x%,y%,300,300,50) end_select select res% case -1 message "Ce n'est pas un polygone" case 0 message "Le point est en-dehors" case 1 message "Le point est dedans" end_select return
Dernière édition par Klaus le Jeu 8 Oct 2015 - 4:08, édité 1 fois | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 8 Oct 2015 - 3:37 | |
| De plus en plus fort Klaus! Non seulement tu nous gratifie de deux super fonctions mais en plus tu es même arrivé à remonter le temps ! version du 10/10 sortie le 08/10 là c' est inégalable. PS : Pour le cercle, le point est toujours en dehors... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 8 Oct 2015 - 4:09 | |
| Oups... les deux points sont corrigés ! Recharge la DLL... | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 8 Oct 2015 - 5:22 | |
| Ok Klaus, cela fonctionne. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: KGF_dll - nouvelles versions Jeu 8 Oct 2015 - 7:22 | |
| super ça. jpcr, tu n'as plus d'excuses .... | |
| | | jpcr
Nombre de messages : 276 Age : 57 Localisation : Val de Marne (94) Date d'inscription : 06/05/2011
| Sujet: Re: KGF_dll - nouvelles versions Jeu 8 Oct 2015 - 9:14 | |
| damned, oui je suis coincé la...
merci a vous tous !! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 8 Oct 2015 - 12:02 | |
| Pour jpcr, et pour tous ceux qui s'intéressent à la détection d'un point dans un polygone, j'ai fait une petite démo un peu particulière. Ce programme télécharge une capture d'écran officielle du jeu Warcraft et l'affiche dans un picture qui remplit l'écran. Ce picture sert de zone sensitive pour un clic. On peut y définir autant de zones actives que nécessaire. Un clic dans une de ces zones actives est alors reconnu et affiché, alors qu'un clic en-dehors de ces zones actives est signalé comme "zone neutre". Pour aider la création des zones actives, j'ai intégré dans ce programme un mode "définition" qui est activé en ligne 7 par la variable def%. En ligne 9 et 10, il faut aussi adapter les chemins pour que ce soit conforme à vos configurations. En mode "définition", une deuxième fenêtre apapraît à droite du terrain de jeu, avec un mémo full_space. On est prêt pour définir une zone en forme de polygone. Pour cela, il suffit de cliquer sur les points qui représentent les coins du polygone souhaité. On voit les coordonnées de ces points apparaître dans le mémo, à droite, au fur et à mesure des clics, et le polygone se dessine progressivement dans l'image, par un trait noir de 1 pixel de large. Ne fermez pas le polygone - le programme s'en chargera lui-même ! Lorsque le polygone est prêt (sans le fermer !), il suffit de surligner le contenu du mémo et le mettre en mémoire par ctrl/C. Ensuite, on arrête le programme par la croix rouge, on retourne dans le source et on intègre le polygone à la suite des DATA existants, en respectant la structure: un entier contenant le nombre de points du nouveau polygone, suivi des DATA des points, insérés par ctrl/V et précédées de "data " pour chaque ligne. Ne pas oublier me mettre à jour le tout premier mot DATA de la liste qui contient le nombre de polygones définis ! Il faut aussi ajouter le signalement du polygone dans la routine clic en ajoutant un nouveau CASE pour le polygone créé. Et voilà. Il suffit alors d'enlever le mode "Edition" dans la ligne 7 en mettant la valeur 0, et on peut exploiter. Voici le code: - Code:
-
' zones_actives_dans_image_warcraft.bas
label clic
dim res%, x%, y%, nzones%, ncoins%, i%, j%
dim def% : def% = 0 : ' <======== mettre 1 ici pour passer en mode "définition" ! dim url$ : url$ = "http://jolstatic.fr/www/captures/2212/5/100245.jpg" dim img$ : img$ = "C:\Users\klausgunther\Documents\Mes projets\Mes projets Delphi\KGF\warcraft.jpg" dim dll$ : dll$ = "KGF.dll"
width 0,970 : height 0,654 picture 1 : width 1,950 : height 1,594
dll_on dll$ res% = dll_call2("DownloadFile",adr(url$),adr(img$)) res% = dll_call1("LoadAnyImageFile",adr(img$)) clipboard_paste 1
if def%=1 form 100 : left 100,width(0)+5 : height 100,height(0) : width 100,300 memo 101 : parent 101,100 : full_space 101 end_if
2d_target_is 1 on_click 1,clic
' nombre de zones data 3 ' grande étoile data 18 data 665,292 data 671,308 data 659,345 data 672,353 data 674,378 data 689,372 data 704,374 data 720,382 data 724,362 data 729,352 data 738,348 data 739,340 data 733,331 data 724,309 data 725,281 data 705,295 data 693,264 data 682,299 ' charriot data 26 data 111,478 data 127,480 data 136,472 data 135,463 data 154,458 data 170,465 data 176,461 data 170,451 data 171,436 data 167,435 data 160,446 data 136,442 data 145,431 data 139,425 data 94,432 data 91,435 data 88,431 data 81,431 data 79,447 data 68,454 data 60,473 data 76,470 data 86,448 data 96,443 data 106,443 data 107,448 ' tête du gardien data 7 data 519,342 data 524,338 data 531,339 data 533,349 data 527,351 data 525,351 data 521,346
if object_exists(100)=0 read nzones% for i%=1 to nzones% read ncoins% dlist 200 + i% for j%=1 to ncoins% read x% read y% item_add 200+i%,str$(x%)+","+str$(y%) next j% item_add 200+i%,item_read$(200+i%,1) next i% end_if
end
clic: x% = mouse_x_left_down(1) y% = mouse_y_left_down(1) if object_exists(100)=1 if count(101)=0 2d_poly_from x%,y% else 2d_poly_to x%,y% end_if item_add 101,str$(x%)+","+str$(y%) return end_if for i%=1 to nzones% res% = dll_call3("IsPointInPolygon",x%,y%,object_internal(200+i%)) if res%=1 select i% case 1 message "Grande étoile" case 2 message "Charriot" case 3 message "Tête du gardien" end_select return end_if next i% message "Partie neutre de l'image" return Les 3 zones actives prédéfinies sont: - la grande étoile à droite - le charriot caché derrière des rochers en bas à gauche - la tête du gardien (attention: il y a un piège !) J'espère que ça vous amusera... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: KGF_dll - nouvelles versions Jeu 8 Oct 2015 - 13:28 | |
| Bonjour Klaus. Tu es une providence pour Panoramic et les panoramiciens ! Bon,j’ai testé les deux nouvelles fonctions : IsPointInpolygone / IsPointInCircle. C’est très utile, merci. J’ai remarqué dans le code exemple que tu as donné : OBJECT_INTERNAL(1). J’avoue que je ne connaissais pas cette variable système (honte à moi !). J’ai revu l’aide Panoramic pour en savoir plus, mais … Et puis je me suis posé la question de pouvoir déterminer si un point est à l’intérieur d’une ellipse. Le cercle n'est qu'un cas particulier de l'ellipse, donc mon code fait d'une pierre deux coups. Et voici le fruit de ma réflexion : - Code:
-
rem ============================================================================ rem IsPointInEllipse rem ============================================================================ label click0 dim x,y,xc,yc,x2,y2,pi,p,a,r,r1,r2 pi = 4*atn(1) : p = pi/180 xc = 350 : yc = 350 : ' Coordonnées du centre de l'ellipse full_space 0 on_click 0,click0 r1 = 200 : r2 = 100 : Tracer_Ellipse(xc,yc,r1,r2) : ' Ellipse large ' r1 = 200 : r2 = 200 : Tracer_Ellipse(xc,yc,r1,r2) : ' Cercle ' r1 = 200 : r2 = 300 : Tracer_Ellipse(xc,yc,r1,r2) : ' Ellipse haute end rem ============================================================================ ' Tracer une ellipse ' xc,yc : coordonnées du centre de l'ellipse ' r1 et r2 respectivement demi-diamètres horizontal et vertical de l'ellipse ' Si r1 = r2 alors léellipse est un cercle SUB Tracer_Ellipse(xc,yc,r1,r2) dim_local x,y 2d_poly_from xc+r1,yc for a = 0 to 2*pi step p x = xc + r1*cos(a) : y = yc +r2*sin(a) : 2d_poly_to x,y next a END_SUB rem ============================================================================ ' Déterminer si le clixk est ç l'intérieur ou à l'extérieur de l'ellipse click0: x = mouse_x_left_down(0) y = mouse_y_left_down(0) ' Soustraire des coordonnées du point cliqué celles du centre de l'ellipse x = x - xc : y = y - yc ' Diviser les coordonnées x par le demi-diamètre horizontal et y par le demi-diamètre vertical x = x/r1 : y = y/r2 ' Calculer la quantité : r = x² + y² r = x*x + y*y ' Selon la valeur de r par rapport à l'unité if r > 1 message "Le point est en dehors de l'ellipse" else if r = 1 message "Le point est sur le contours de l'ellipse" else message "Le point est à l'intérieur de l'ellipse" end_if end_if return rem ============================================================================
Essayez respectivement avec les lignes 10 ou 11 ou 12 | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: KGF_dll - nouvelles versions Jeu 8 Oct 2015 - 13:29 | |
| Magnifique Klaus... c'est super...je me tais et je m'incline .... | |
| | | jpcr
Nombre de messages : 276 Age : 57 Localisation : Val de Marne (94) Date d'inscription : 06/05/2011
| Sujet: Re: KGF_dll - nouvelles versions Jeu 8 Oct 2015 - 14:04 | |
| que dire ?
un grand merci pour tout ce que tu nous apporte Klaus !!
mais aussi a tous les autres qui nous offrent de nombreux programmes ou répondent a nos questions précisement et rapidement !!!
jp | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: KGF_dll - nouvelles versions Jeu 8 Oct 2015 - 14:33 | |
| C’est ce qui fait la beauté du forum et la bonté des forumistes ! | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 8 Oct 2015 - 18:01 | |
| Là, je suis sur le c... ! Bravo ! flash n' a plus qu' à bien se tenir ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 8 Oct 2015 - 18:54 | |
| Nouvelle version: KGF.dll V5.10 du 08/10/2015
Nouveautés: - nouvelle fonction IsPointInElipse
Modules modifiés: KGF.dll KGF.chm
La doc, l'aide en ligne et les sources sont à jour.
Un grand MERCI à Papydall qui a fourni les formules sous forme de programme Panoramic. Bien qu'on puisse faire cela en Panoramic pur (comme l'a démontré papydall), j'ai voulu offrir une palette complète de fonctions dans ce domaine. Maintenant, on a le test si un point est dans un rectangle, polygone, cercle ou ellipse. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: KGF_dll - nouvelles versions Jeu 8 Oct 2015 - 19:18 | |
| | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Jeu 8 Oct 2015 - 20:46 | |
| Et voici cette fonction intégrée dans le programme de démo: - Code:
-
' test_IsPointInPolygon.bas
label click0, poly, cercle, ellipse
dim i%,x%,y%,n%, res%, form%, sx,sy,xc%,yc%, a, pi, p, r1, r2 pi = 4*atn(1) p = pi/180
data 7,100,60,180,180,120,330,30,90,90,430,250,110,100,60
full_space 0 on_click 0,click0
dlist 1
button 2 : caption 2,"Polygone" : on_click 2,poly button 3 : caption 3,"Cercle" : on_click 3,cercle : top 3,25 button 4 : caption 4,"Ellipse" : on_click 4,ellipse : top 4,50
dll_on "KGF.dll" end
poly: color 0,255,255,255 restore read n% clear 1 for i%=1 to n% read x% read y% item_add 1,str$(x%)+","+str$(y%) if i%=1 2d_poly_from x%,y% else 2d_poly_to x%,y% end_if next i% form% = 0 return
cercle: color 0,254,255,255 2d_circle 300,300,50 form% = 1 return
ellipse: color 0,255,254,255 xc% = 450 yc% = 375 r1 = 150 r2 = 75 2d_poly_from xc%+r1,yc% for a = 0 to 2*pi step p sx = xc% + r1*cos(a) : sy = yc% +r2*sin(a) : 2d_poly_to sx,sy next a form% = 2 return
click0: x% = mouse_x_left_down(0) y% = mouse_y_left_down(0) select form% case 0 res% = dll_call3("IsPointInPolygon",x%,y%,object_internal(1)) case 1 res% = dll_call5("IsPointInCircle",x%,y%,300,300,50) case 2 res% = dll_call6("IsPointInEllipse",x%,y%,300,300,600,450) end_select select res% case -1 message "Ce n'est pas un polygone" case 0 message "Le point est en-dehors" case 1 message "Le point est dedans" end_select return | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: KGF_dll - nouvelles versions Jeu 8 Oct 2015 - 23:51 | |
| Testée et approuvée. Vielen Dank, Klaus! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Ven 9 Oct 2015 - 2:03 | |
| Nouvelle version: KGF.dll V5.11 du 08/10/2015Nouveautés: - nouvelle fonction GetInnerPolygonPoint - nouvelle fonction FloodfillPictureToBorderColorModules modifiés: KGF.dll KGF.chmLa doc, l'aide en ligne et les sources sont à jour. La fonction GetInnerPolygonPoint permet de déterminer un point qui est avec certitude à l'intérieur d'un polygone quelconque non croisé. Et la fonction FloodfillPictureToBorderColor est similaire à la commande 2D_FLOOD, mais, à partir d'un point de départ, elle remplace tous les pixels d'un picture par une couleur de remplissage, jusqu'à rencontrer une couleur de bordure. On peut ainsi dessiner, par exemple, on polygone ou une ellipse dans une photo, et remplir l'intérieur par une couleur choisie, quelque soit le contenu de l'intérieur. Ceci diffère du fonctionnement de la commande 2D_FLOOD qui, à partir d'un point de départ, remplace tous les pixels ayant la même couleur, par une couleur de rempissage, en s'arrêtant à chaque couleur différente rencontrée. En guise de démonstration, j'ai ajouté un bouton "Montrer" en haut à gauche de la fenêtre du programme de test des zones actives, montrant une capture de Warcraft. Ce bouton va permettre de visualiser les 3 zones actives, et son libellé change à "Cacher". Un autre clic sur ce bouton va restaurer l'image initiale. Pour chacune des 3 zones actives de ce programme, on appelle ces deux nouvelles fonctions pour trouver un point à l'intérieur du polygone définissant la zone active, puis pour la remplir d'une couleur fixe. Voici cette version: - Code:
-
' zones_actives_dans_image_warcraft.bas
label clic, montrer
dim res%, x%, y%, nzones%, ncoins%, i%, j%, vis%, xp%, yp%, clr%
dim def% : def% = 0 : ' <======== mettre 1 ici pour passer en mode "définition" ! dim url$ : url$ = "http://jolstatic.fr/www/captures/2212/5/100245.jpg" dim img$ : img$ = "C:\Users\klausgunther\Documents\Mes projets\Mes projets Delphi\KGF\warcraft.jpg" dim dll$ : dll$ = "KGF.dll"
width 0,970 : height 0,654 picture 1 : width 1,950 : height 1,594
dll_on dll$ res% = dll_call2("DownloadFile",adr(url$),adr(img$)) res% = dll_call1("LoadAnyImageFile",adr(img$)) clipboard_paste 1
if def%=1 form 100 : left 100,width(0)+5 : height 100,height(0) : width 100,300 memo 101 : parent 101,100 : full_space 101 else button 101 : caption 101,"Montrer" : on_click 101,montrer end_if
2d_target_is 1 on_click 1,clic
' nombre de zones data 3 ' grande étoile data 18 data 665,292 data 671,308 data 659,345 data 672,353 data 674,378 data 689,372 data 704,374 data 720,382 data 724,362 data 729,352 data 738,348 data 739,340 data 733,331 data 724,309 data 725,281 data 705,295 data 693,264 data 682,299 ' charriot data 26 data 111,478 data 127,480 data 136,472 data 135,463 data 154,458 data 170,465 data 176,461 data 170,451 data 171,436 data 167,435 data 160,446 data 136,442 data 145,431 data 139,425 data 94,432 data 91,435 data 88,431 data 81,431 data 79,447 data 68,454 data 60,473 data 76,470 data 86,448 data 96,443 data 106,443 data 107,448 ' tête du gardien data 7 data 519,342 data 524,338 data 531,339 data 533,349 data 527,351 data 525,351 data 521,346
if object_exists(100)=0 read nzones% for i%=1 to nzones% read ncoins% dlist 200 + i% for j%=1 to ncoins% read x% read y% item_add 200+i%,str$(x%)+","+str$(y%) next j% item_add 200+i%,item_read$(200+i%,1) next i% end_if
end
clic: x% = mouse_x_left_down(1) y% = mouse_y_left_down(1) if object_exists(100)=1 if count(101)=0 2d_poly_from x%,y% else 2d_poly_to x%,y% end_if item_add 101,str$(x%)+","+str$(y%) return end_if for i%=1 to nzones% res% = dll_call3("IsPointInPolygon",x%,y%,object_internal(200+i%)) if res%=1 select i% case 1 message "Grande étoile" case 2 message "Charriot" case 3 message "Tête du gardien" end_select return end_if next i% message "Partie neutre de l'image" return montrer: if nzones%=0 message "Rien à montrer" return end_if if vis%=0 clr% = (255*256+255)*256 clipboard_copy 1 res% = dll_call0("LoadPicture") res% = dll_call1("SetImmediateMode",1) for i%=1 to nzones% coordonnees(i%,1) 2d_poly_from x%,y% for j%=2 to count(200+i%) coordonnees(i%,j%) 2d_poly_to x%,y% next j% coordonnees(i%,1) 2d_poly_to x%,y% display clipboard_copy 1 res% = dll_call0("LoadPicture") pause 100 res% = dll_call4("GetInnerPolygonPoint",object_internal(200+i%),5,adr(xp%),adr(yp%)) ' message item_read$(200+i%,1)+"/"+item_read$(200+i%,2)+": "+str$(xp%)+","+str$(yp%) res% = dll_call4("FloodfillPictureToBorderColor",xp%,yp%,clr%,0) clipboard_paste 1 next i% vis% = 1 caption 101,"Cacher" else res% = dll_call0("SavePicture") res% = dll_call1("LoadAnyImageFile",adr(img$)) clipboard_paste 1 vis% = 0 caption 101,"Montrer" end_if return sub coordonnees(n%,i%) dim_local s$, k% s$ = item_read$(200+n%,i%) k% = instr(s$,",") x% = val(left$(s$,k%-1)) y% = val(mid$(s$,k%+1,len(s$))) end_sub | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: KGF_dll - nouvelles versions Ven 9 Oct 2015 - 13:25 | |
| Doc de KGF.dll RandomValue - Citation :
- Cette fonction retourne une valeur entière aléatoire dans une un intervalle entre 1 et une valeur maximale: 1 <= x <= maxi. L'appel a le format suivant:
Pour l’exemple donné - Code:
-
dim res% dll_on "kgf.dll" res% = DLL_call1("RandomValue",6) message "Valeur aléatoire: "+str$(res%)
Il retourne toujours 1, mieux vaut toujours randomiser la graine avant le 1er appel et l'exemple devient : - Code:
-
dim res% dll_on "kgf.dll" res% = DLL_call1("RandomValue",0-1) : ' randomize res% = DLL_call1("RandomValue",6) message "Valeur aléatoire: "+str$(res%)
Fonctions binairesbin_ROL - Citation :
- Cette fonction travaille sur une valeur binaire de 32 bits. Ce sont les valeurs représentées en Panoramic par des entiers, du type n% La rotation à gauche signifie que l'ensemble des bits sera décalé à gauche et le (supprimer ce le) que les bits sortant à gauche seront réinjectés à droite, de façon cyclique. L'appel a le format suivant:
Exemple : - Code:
-
dim res%, val% dll_on "kgf.dll" val% = 17 res% = dll_call2("bin_ROL",val%,3%) message "Résultat: "+str$(res%)
Enlever le % après 3 - Code:
-
res% = dll_call2("bin_ROL",val%,3) Mêmes remarques pour bin_ROR , bin_SHL, bin_SHR, bin_WROL, bin_WROR, bin_WSHL, bin_WSHR, bin_BROL, bin_BROR, bin_BSHL, bin_BSHRLe copier / coller n'a pas que des avantages ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Ven 9 Oct 2015 - 13:56 | |
| Merci, Papydall ! Tout est corrigé, et ce sera mis en place avec la prochaine version. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Ven 9 Oct 2015 - 14:01 | |
| J'ai fait une petite amélioration technique dans la fonction GetInnerPolygonPoint. La distribution est faite, mais il n'y a pas de changement de version. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: KGF_dll - nouvelles versions Ven 9 Oct 2015 - 14:09 | |
| | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Sam 10 Oct 2015 - 22:35 | |
| Tiens, c'est curieux... Pas de réaction sur la version KGF.dll V5.11 du 08/10/2015 ? Avec les nouvelles fonctions GetInnerPolygonPoint et FloodfillPictureToBorderColor ? Pour les amateurs de jeu en 2d, c'est pourtant sympa de pouvoir visualiser, d'un coup, les zones "sensibles" d'une image puis de les cacher ? Et même en traitement de photos, ça peut être intéressant. Car enfin, la commande 2D_FLOOD ne marche que pour des zones d'une couleur unie, et elle produit un résultat désagréable même sur un léger dégradé. Là, on peut "verser" une couleur dans une zone délimitée par une couleur spécifique, quelque soit le contenu de cette zone, et même sur une photo. Ce résultat est spéctaculaire dans le programme de démo publiée hier à 2h03, par me bouton "Montrer" en haut à gauche de l'écran... | |
| | | chatmath75
Nombre de messages : 4 Localisation : Paris 7ème Date d'inscription : 05/10/2015
| Sujet: Re: KGF_dll - nouvelles versions Sam 10 Oct 2015 - 22:42 | |
| | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: KGF_dll - nouvelles versions Sam 10 Oct 2015 - 22:50 | |
| ? quel rapport ?
@Klaus, effectivement je n'avais pas fait gaffe, mais cette fonction (FloodFillPictureToBorderColor) m'intéresse beaucoup en photo pour remplir une zone d'une couleur donnée, jusqu'ici je n'avais pas de solution, sauf à le faire pixel par pixel, mais ça met un temps fou... Je vais intégrer ça vite fait ! Merci en tout cas.
PS testé et approuvé ! Super. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Dim 11 Oct 2015 - 14:03 | |
| Nouvelle version: KGF.dll V5.12 du 011/10/2015Nouveautés: - nouvelle fonction WindowAddPolygonRegionModules modifiés: KGF.dll KGF.chmLa doc, l'aide en ligne et les sources sont à jour, y compris les corrections de la doc par Papydall. Cette nouvelle fonction étend les possibilités de gestion des régiions Windows par Panoramic. En guise de démonstration, j'ai utilisé le programme des "zones sensibles" sur image Warcraft. Un nouveau bouton "Percer" apparaît en haut ) gauche de la fenêtre. Un clic sur ce bouton "perce" la fenêtre selon les formes des zones sensibles. Ce sont de véritables trous: l'image de l'écran en-dessous transparaît à-travers, et on peut même cliquer à travers un de ces trous, si un bouton ou un champs apparaît ainsi ! Un autre clic sur ce nouveau bouton "rebouche" ces trous. Voici la démo: - Code:
-
' zones_actives_dans_image_warcraft.bas
label clic, montrer, percer
dim res%, x%, y%, nzones%, ncoins%, i%, j%, vis%, xp%, yp%, clr% dim trou%, reg0%, reg1%, reg2%, dx%, dy% dim fgauche%, fhaut%, flargeur%, fhauteur% dim cgauche%, chaut%, clargeur%, chauteur%
dim def% : def% = 0 : ' <======== mettre 1 ici pour passer en mode "définition" ! dim url$ : url$ = "http://jolstatic.fr/www/captures/2212/5/100245.jpg" dim img$ : img$ = "C:\Users\klausgunther\Documents\Mes projets\Mes projets Delphi\KGF\warcraft.jpg" dim dll$ : dll$ = "KGF.dll"
width 0,970 : height 0,654 picture 1 : width 1,950 : height 1,594
dll_on dll$ res% = dll_call2("DownloadFile",adr(url$),adr(img$)) res% = dll_call1("LoadAnyImageFile",adr(img$)) clipboard_paste 1
if def%=1 form 100 : left 100,width(0)+5 : height 100,height(0) : width 100,300 memo 101 : parent 101,100 : full_space 101 else button 101 : caption 101,"Montrer" : on_click 101,montrer button 102 : caption 102,"Percer" : on_click 102,percer : top 102,25 end_if
2d_target_is 1 on_click 1,clic
' nombre de zones data 3 ' grande étoile data 18 data 665,292 data 671,308 data 659,345 data 672,353 data 674,378 data 689,372 data 704,374 data 720,382 data 724,362 data 729,352 data 738,348 data 739,340 data 733,331 data 724,309 data 725,281 data 705,295 data 693,264 data 682,299 ' charriot data 26 data 111,478 data 127,480 data 136,472 data 135,463 data 154,458 data 170,465 data 176,461 data 170,451 data 171,436 data 167,435 data 160,446 data 136,442 data 145,431 data 139,425 data 94,432 data 91,435 data 88,431 data 81,431 data 79,447 data 68,454 data 60,473 data 76,470 data 86,448 data 96,443 data 106,443 data 107,448 ' tête du gardien data 7 data 519,342 data 524,338 data 531,339 data 533,349 data 527,351 data 525,351 data 521,346
res% = DLL_call5("GetFormMetrics",handle(0),adr(fgauche%),adr(fhaut%),adr(flargeur%),adr(fhauteur%)) res% = DLL_call5("GetFormClientMetrics",handle(0),adr(cgauche%),adr(chaut%),adr(clargeur%),adr(chauteur%))
dx% = cgauche% - fgauche% dy% = chaut% - fhaut%
if object_exists(100)=0 read nzones% for i%=1 to nzones% read ncoins% dlist 200 + i% dlist 300 + i% for j%=1 to ncoins% read x% read y% item_add 200+i%,str$(x%)+","+str$(y%) item_add 300+i%,str$(x%+dx%)+","+str$(y%+dy%) next j% item_add 200+i%,item_read$(200+i%,1) item_add 300+i%,item_read$(300+i%,1) next i% end_if
end
clic: x% = mouse_x_left_down(1) y% = mouse_y_left_down(1) if object_exists(100)=1 if count(101)=0 2d_poly_from x%,y% else 2d_poly_to x%,y% end_if item_add 101,str$(x%)+","+str$(y%) return end_if for i%=1 to nzones% res% = dll_call3("IsPointInPolygon",x%,y%,object_internal(200+i%)) if res%=1 select i% case 1 message "Grande étoile" case 2 message "Charriot" case 3 message "Tête du gardien" end_select return end_if next i% message "Partie neutre de l'image" return montrer: if nzones%=0 message "Rien à montrer" return end_if if vis%=0 clr% = (255*256+255)*256 clipboard_copy 1 res% = dll_call0("LoadPicture") res% = dll_call1("SetImmediateMode",1) for i%=1 to nzones% coordonnees(i%,1) 2d_poly_from x%,y% for j%=2 to count(200+i%) coordonnees(i%,j%) 2d_poly_to x%,y% next j% coordonnees(i%,1) 2d_poly_to x%,y% display clipboard_copy 1 res% = dll_call0("LoadPicture") pause 100 res% = dll_call4("GetInnerPolygonPoint",object_internal(200+i%),5,adr(xp%),adr(yp%)) ' message item_read$(200+i%,1)+"/"+item_read$(200+i%,2)+": "+str$(xp%)+","+str$(yp%) res% = dll_call4("FloodfillPictureToBorderColor",xp%,yp%,clr%,0) clipboard_paste 1 next i% vis% = 1 caption 101,"Cacher" else res% = dll_call0("SavePicture") res% = dll_call1("LoadAnyImageFile",adr(img$)) clipboard_paste 1 vis% = 0 caption 101,"Montrer" end_if return percer: if nzones%=0 message "Rien à percer" return end_if if trou%=0 reg1% = 0 for i%=1 to nzones% res% = dll_call2("WindowAddPolygonRegion",adr(reg1%),object_internal(300+i%)) reg2% = DLL_call3("WindowRegionHole",handle(0),1,adr(reg1%)) res% = DLL_call2("WindowRegionAsWindow",handle(0),adr(reg2%)) next i% trou% = 1 caption 102,"Reboucher" else reg1% = 0 for i%=1 to nzones% res% = dll_call2("WindowAddPolygonRegion",adr(reg1%),object_internal(300+i%)) res% = DLL_call3("WindowRegionHole",handle(0),0,adr(reg1%)) res% = DLL_call2("WindowRegionAsWindow",handle(0),adr(reg2%)) next i% trou% = 0 caption 102,"Percer" end_if return sub coordonnees(n%,i%) dim_local s$, k% s$ = item_read$(200+n%,i%) k% = instr(s$,",") x% = val(left$(s$,k%-1)) y% = val(mid$(s$,k%+1,len(s$))) end_sub
Quel utilisation ? Par exemple en créant un jeu façon puzzle, et des actions comme le lancer d'une boule ou un clic de souris font "disparaitre" une pièce du puzzle... A vous d'imaginer l'utilisation. On peut faire toutes sortes de combinaisons de rectangles, ellipses et polygones pour définir une région qu'on peut appliquer à une fenêtre. Soit pour lui donner cette forme, soit pour percer un trou de cette forme, soit pour reboucher un trou de cette forme. | |
| | | Contenu sponsorisé
| Sujet: Re: KGF_dll - nouvelles versions | |
| |
| | | | KGF_dll - nouvelles versions | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |