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 |
|
|
| question pour un nul... | |
| | Auteur | Message |
---|
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: question pour un nul... Sam 4 Aoû 2012 - 6:13 | |
| J'ai besoin de vos lumières La première coordonnée d'un bitmap ou jpg, le petit pixel complètement en haut à gauche, celui dont on se fout royalement ... ...jusqu'à avoir besoin de découper une image... Est ce (0,0) ou (1,1) ? | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 4 Aoû 2012 - 7:54 | |
| comme je suis nul , j'ai plein de questions... j'ai un petit souci avec "PrintScreen.dll" je veux faire du découpage ( oui je sais , je retombe en enfance... ...moi aussi ) la dll veut bien m'en faire dix d'affilé mais pas onze... j'ai essayé de rajouter des pauses mais rien n'y fait, peut être suis je trop gourmand ( M...! encore un defaut ) je mets le *.bas de test dès fois que klaus passe par là.... - Code:
-
dim rep$ ,a%,x0%,x1%,y0%,y1%,i%,T0%,L0%,T1%,L1%,x%,z% rep$=dir_current$
label go,load_image
edit 1 :top 1,15:left 1,15 button 2:top 2,15:left 2,150:on_click 2,load_image
end
load_image: open_dialog 5 dir_dialog 5,rep$ text 1,file_name$(5) gosub go return
go: if object_exists(4)=1 show 4 else form 4:width 4,307:height 4,335 command_target_is 4 dll_on rep$+"\PrintScreen.dll" picture 6:width 6,290:height 6,290 a%=0:L0%=-57:T0%=0:L1%=0:T1%=57 repeat a%=a%+1 file_load 6,text$(1) clipboard_copy 6 pause 500 i% = dll_call0("LoadPicture") L0%=L0%+58 T0%=T0%+1 L1%=L1%+58 T1%=T1%+1 x0% = L0% y0% = T0% x1% = L1% y1% = T1% i% = dll_call4("ExtractRectangleFromPicture",x0%,y0%,x1%,y1%) pause 400 i%=dll_call0("SavePicture") clipboard_paste 6 file_save 6,rep$+"\"+str$(a%+10)+".bmp" pause 400 until a%=5 dll_off
dll_on rep$+"\PrintScreen.dll" a%=5:L0%=-57:T0%=58:L1%=0:T1%=115 repeat a%=a%+1 file_load 6,text$(1) clipboard_copy 6 pause 500 i% = dll_call0("LoadPicture") L0%=L0%+58 T0%=T0%+1 L1%=L1%+58 T1%=T1%+1 x0% = L0% y0% = T0% x1% = L1% y1% = T1% i% = dll_call4("ExtractRectangleFromPicture",x0%,y0%,x1%,y1%) pause 300 i%=dll_call0("SavePicture") clipboard_paste 6 file_save 6,rep$+"\"+str$(a%+10)+".bmp" pause 400 until a%=5 dll_off
dll_on rep$+"\PrintScreen.dll" a%=5:L0%=-57:T0%=116:L1%=0:T1%=173 repeat a%=a%+1 file_load 6,text$(1) clipboard_copy 6 pause 500 i% = dll_call0("LoadPicture") L0%=L0%+58 T0%=T0%+1 L1%=L1%+58 T1%=T1%+1 x0% = L0% y0% = T0% x1% = L1% y1% = T1% i% = dll_call4("ExtractRectangleFromPicture",x0%,y0%,x1%,y1%) pause 300 i%=dll_call0("SavePicture") clipboard_paste 6 file_save 6,rep$+"\"+str$(a%+10)+".bmp" pause 400 until a%=5 dll_off end_if return | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: question pour un nul... Sam 4 Aoû 2012 - 10:14 | |
| 1. Le premier pixel en haut à gauche est (0,0).
2. Je regarde ton problème.
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: question pour un nul... Sam 4 Aoû 2012 - 10:36 | |
| Essaie comme ceci: - Code:
-
dim rep$ ,a%,x0%,x1%,y0%,y1%,i%,T0%,L0%,T1%,L1%,x%,z%, s$ rep$=dir_current$
label go,load_image
edit 1 :top 1,15:left 1,15 button 2:top 2,15:left 2,150:on_click 2,load_image
end
load_image: open_dialog 5 dir_dialog 5,rep$ s$ = file_name$(5) if s$="_" then return text 1,s$ gosub go return
go: if object_exists(4)=1 show 4 else form 4:width 4,307:height 4,335 command_target_is 4 dll_on rep$+"\PrintScreen.dll" picture 6:width 6,290:height 6,290 a%=0:L0%=-57:T0%=0:L1%=0:T1%=57 repeat a%=a%+1 file_load 6,text$(1) clipboard_copy 6 pause 500 i% = dll_call0("LoadPicture") L0%=L0%+58 T0%=T0%+1 L1%=L1%+58 T1%=T1%+1 x0% = L0% y0% = T0% x1% = L1% y1% = T1% i% = dll_call4("ExtractRectangleFromPicture",x0%,y0%,x1%,y1%) pause 400 i%=dll_call0("SavePicture") clipboard_paste 6 file_save 6,rep$+"\"+str$(a%+10)+".bmp" pause 400 until a%=5 dll_off
dll_on rep$+"\PrintScreen.dll" a%=5:L0%=-57:T0%=58:L1%=0:T1%=115 repeat a%=a%+1 file_load 6,text$(1) clipboard_copy 6 pause 500 i% = dll_call0("LoadPicture") L0%=L0%+58 T0%=T0%+1 L1%=L1%+58 T1%=T1%+1 x0% = L0% y0% = T0% x1% = L1% y1% = T1% i% = dll_call4("ExtractRectangleFromPicture",x0%,y0%,x1%,y1%) pause 300 i%=dll_call0("SavePicture") clipboard_paste 6 file_save 6,rep$+"\"+str$(a%+10)+".bmp" pause 400 until a%=10 dll_off
dll_on rep$+"\PrintScreen.dll" a%=10:L0%=-57:T0%=116:L1%=0:T1%=173 repeat a%=a%+1 file_load 6,text$(1) clipboard_copy 6 pause 500 i% = dll_call0("LoadPicture") L0%=L0%+58 T0%=T0%+1 L1%=L1%+58 T1%=T1%+1 x0% = L0% y0% = T0% x1% = L1% y1% = T1% i% = dll_call4("ExtractRectangleFromPicture",x0%,y0%,x1%,y1%) pause 300 i%=dll_call0("SavePicture") clipboard_paste 6 file_save 6,rep$+"\"+str$(a%+10)+".bmp" pause 400 until a%=15 dll_off end_if return Seule la première boucle REPEAT se terminait normalement. Dès la seconde, la condition de fin n'était plus rencontrée, et ça bouclait à l'infini. J'ai ajouté la possibilité de ne pas choisir un fichier, pour le confort. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 4 Aoû 2012 - 11:42 | |
| Merci Klaus, çà fonctionne le but du truc est d'ajouter cette fonction à mon puzzle comme çà plus besoin d'avoir une multitude de fichiers image. il n'y aurait plus besoin que du fichier de base ( image entière) A la sélection d'une des images par le joueur, le programme pourrait créer les "pseudos sprites" dans un fichier "Temp" et seraient détruits après usage, à la femeture de la partie. Cela fera un "gosub de plus mais je n'en suis plus à un près ... Pour le premier pixel, j'avais un gros doute sur certains site, ils disent (1,1) mais il est vrai que nous sommes en Panoramic.... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: question pour un nul... Sam 4 Aoû 2012 - 13:11 | |
| ... et sous Delphi en ce qui concerne la DLL. Et là aussi, c'est (0,0).
Ton idée de création de Sprite par découpage d'une grande image est excellente ! A appliquer dans d'autres domaines, par exemple pour avoir les images des boutons d'une tool-bar: il suffit de constituer une seule image avec un éditeur d'images (Paint, PhotoFiltre, Gimp, ...) avec toutes les icônes voulues. On distribue cette image avec l'exécutable, et il n'y a plus qu'à découper les images pour chaque bouton individuel. Et on peut facilement imaginer d'autres applications... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: question pour un nul... Sam 4 Aoû 2012 - 15:34 | |
| En plus Jack nous à dit qu'il ferait l'équivalent des fonctions de la DLL directement intégré à Panoramic C'est vrai que ce sont des fonctions basiques de traitement d'images mais qu'elles sont juste fondamentales dès que l'on veut faire certains types d'opérations. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 4 Aoû 2012 - 20:10 | |
| Le plus compliqué dans mon découpage c'est de trouver les bonnes données pour obtenir dans une image de 290x290 des sprites de 58x58. Quelque soit les chiffres que je mette, çà ne colle pas, et vu que les abscisses et ordonnés sont inversés (point (0,0) en haut gauche au lieu de bas gauche ) par rapport à un graphique classique, je suis un peu perturbé... je vous mets ma boucle de création dans son état : - Code:
-
dim rep$ ,a%,x0%,x1%,y0%,y1%,i%,T0%,L0%,T1%,L1%,x%,z%, s$,b% rep$=dir_current$
label go,load_image
edit 1 :top 1,15:left 1,15 button 2:top 2,15:left 2,150:on_click 2,load_image
end
load_image: open_dialog 5 dir_dialog 5,rep$ s$ = file_name$(5) if s$="_" then return text 1,s$ gosub go return
go: if object_exists(4)=1 show 4 else form 4:width 4,307:height 4,335 command_target_is 4 dll_on rep$+"\PrintScreen.dll" picture 6:width 6,290:height 6,290 for x%=1 to 5 if x%=1 a%=0:b%=5:L0%=-58:T0%=0:L1%=0:T1%=57 else if x%=2 a%=5:b%=10:L0%=-58:T0%=59:L1%=0:T1%=116 else if x%=3 a%=10:b%=15:L0%=-58:T0%=117:L1%=0:T1%=174 else if x%=4 a%=15:b%=20:L0%=-58:T0%=175:L1%=0:T1%=232 else a%=20:b%=25:L0%=-58:T0%=233:L1%=0:T1%=290 end_if end_if end_if end_if repeat a%=a%+1 file_load 6,text$(1) clipboard_copy 6 pause 500 i% = dll_call0("LoadPicture") L0%=L0%+58 L1%=L1%+58 x0% = L0% y0% = T0% x1% = L1% y1% = T1% i% = dll_call4("ExtractRectangleFromPicture",x0%,y0%,x1%,y1%) pause 400 i%=dll_call0("SavePicture") clipboard_paste 6 file_save 6,rep$+"\"+str$(a%+10)+".bmp" pause 400 until a%=b% next x% dll_off end_if return Autre chose, le découpage provoque un bord blanc . (çà doit être mon ciseau qui est de mauvaise qualité .... ) | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: question pour un nul... Sam 4 Aoû 2012 - 20:31 | |
| premier 0-> 57, 2eme 58->115, 3 ème 116->173, 4 eme: 174-> 231, 5eme 232 -> 289 tu fais une boucle de i allant de 0 à 4 et tu calcules: pos départ: 0+i*58 et arrivée 0+i*58 pareil pour les y | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 4 Aoû 2012 - 22:56 | |
| Bon, je tiens un code qui fonctionne... maintenant si quelqu'un a plus court, je suis preneur... - Code:
-
dim rep$ ,a%,x0%,x1%,y0%,y1%,i%,T0%,L0%,T1%,L1%,x%,z%, s$,b% ,g% rep$=dir_current$ width 0,300:height 0,90 label go,load_image,Quitter
edit 1 :top 1,15:left 1,15 button 2:top 2,15:left 2,150:on_click 2,load_image
if g%=25 then gosub Quitter end
load_image: open_dialog 5 dir_dialog 5,rep$ s$ = file_name$(5) if s$="_" then return text 1,s$ gosub go if object_exists(4)=1 then delete 4 return
go: form 4:hide 4:width 4,307:height 4,335 command_target_is 4 dll_on rep$+"\PrintScreen.dll" picture 6:width 6,290:height 6,290 g%=0 for x%=1 to 5 if x%=1 a%=0:b%=5:L0%=-58:T0%=0:L1%=0:T1%=57 else if x%=2 a%=5:b%=10:T0%=58:T1%=115 else if x%=3 a%=10:b%=15:T0%=116:T1%=173 else if x%=4 a%=15:b%=20:T0%=174:T1%=231 else a%=20:b%=25:T0%=232:T1%=289 end_if end_if end_if end_if repeat a%=a%+1 g%=g%+1 caption 2,str$(g%) file_load 6,text$(1) clipboard_copy 6 pause 500 i% = dll_call0("LoadPicture") if a%=((x%-1)*5)+1 L0%=0 L1%=57 else if a%=((x%-1)*5)+2 L0%=58 L1%=115 else if a%=((x%-1)*5)+3 L0%=116 L1%=173 else if a%=((x%-1)*5)+4 L0%=174 L1%=231 else if a%=((x%-1)*5)+5 L0%=232 L1%=289 end_if end_if end_if end_if end_if x0% = L0% y0% = T0% x1% = L1% y1% = T1% i% = dll_call4("ExtractRectangleFromPicture",x0%,y0%,x1%,y1%) pause 400 i%=dll_call0("SavePicture") clipboard_paste 6 file_save 6,rep$+"\Sprite\"+str$(a%+10)+".bmp" pause 400 until a%=b% next x% dll_off command_target_is 0 if g%=25 then gosub Quitter return
Quitter: terminate | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 5 Aoû 2012 - 5:23 | |
| J'essaye d'intégrer cette "massicot" à mon Puzzle mais la je crois que j'ai un problème de gestion de dll si j'en fais un outils externe il fonctionne avec la dll, tout va bien si je l'appelle par "execute_wait" avec en paramètre le nom du fichier à découper, plus moyen de charger la dll. pourtant j'ai fait attention de mettre l'appel en dehors de l'utilisation d'une autre par le programme mère.(Puzzle3 dans le zip) @ Klaus, Aurais tu un exemple d'utilisation de ta dll "DynamicallyLoadDLL.dll" | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: question pour un nul... Dim 5 Aoû 2012 - 9:07 | |
| Dans DLL_Divers.zip disponibe sur mon site, il y a ce programme: - Code:
-
' test DynamicallyLoadDLL.bas ' ' Ce programme met en évidence les possibilités de DynamicallyLoadDLL.dll
label unload, recept, send
dim handle_LoadProgram%, handle_IPC%, nom1$, nom2$, i%, index%, cnt%, id_boite% dim handle_calc%, handle_message%,mes$, form_hnd%, s$, hnd0%, hnd_calc%
' création du GUI caption 0,"Test DynamicallyLoadDLL" on_close 0,unload edit 1: top 1,-1100 : left 1,-1100 : on_change 1,recept : ' boite mail button 2 : top 2,10 : left 2,10 : width 2,120 : caption 2,"Envoi message" : on_click 2,send alpha 3 : top 3,60 : left 3,10 s$ = "La calculatrice est utilisable en agrandissant sa fenêtre."+chr$(13)+chr$(10)+chr$(10) s$ = s$ + "En cliquant sur le bouton, on envoie un message dont la réception est signalée." caption 3,s$
' quelques initialisations form_hnd% = handle(0) nom1$ = "LoadProgram.dll" nom2$ = "IPC.dll" cnt% = 0 id_boite% = -1100
' Pour Panoramic, une seule DLL est connue: celle de chargement dynamique d'autres DLL ! dll_on "DynamicallyLoadDLL.dll" handle_LoadProgram% = dll_call1("LoadDLL",adr(nom1$)) : ' charger LoadProgram.dll handle_IPC% = dll_call1("LoadDLL",adr(nom2$)) : ' charger IPC.dll
' connecter le système de messages sur notre boite de réception s$ = "IPCGetHandle" index% = dll_call2("TargetDLL",handle_IPC%,adr(s$)) : ' pointer sur la routine IPCGetHAndle s$ = caption$(0) handle_message% = dll_call3("CallDLL3",adr(s$),len(s$),id_boite%) : ' et appeler cette routine
s$ = "LoadProgramMinimized" : ' pointer sur la routine LoadProgramMinimized index% = dll_call2("TargetDLL",handle_LoadProgram%,adr(s$)) hnd0% = handle(0) hnd_calc% = dll_call2("CallDLL2",2,hnd0%) : ' et appeler cette routine
' handle_calc% = dll_call2("LoadProgramMinimized",2,form_hnd%)
end
' envoi d'un message send: : ' pointer sur la routine IPCSendMessage s$ = "IPCSendMessage" index% = dll_call2("TargetDLL",handle_IPC%,adr(s$)) cnt% = cnt% + 1 mes$ = "Juste pour voir..."+str$(cnt%) i% = dll_call3("CallDLL3",adr(mes$),len(mes$),handle_message%) : ' et appeler cette routine return
' évènement "réception d'un message" recept: message "Message recu: "+text$(1) : ' afficher le message reçu return
' décharger les DLL inconnus de Panoramic unload: i% = dll_call1("UnLoadDLL",handle_IPC%) i% = dll_call1("UnLoadDLL",handle_LoadProgram%) return
end
Il utilise DynamicallyLoadDLL.dll pour charger simultanément LoadProgram.dll et IPC.DLL et permet de les utiliser simultanément... | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 5 Aoû 2012 - 9:38 | |
| @ Klaus Je vais étudier cela de très près, de très près... | |
| | | Contenu sponsorisé
| Sujet: Re: question pour un nul... | |
| |
| | | | question pour un nul... | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |