je suis un peu lent pour coder maintenant, que je ne code plus
tiens voila un squelette
ici je simule des images (par des box Aleatoire de couleur, et de position ) je me sert de la couleur du fond (noir rgb 0,0,0 )
je simule une capture en dessinant un box noir a chaque capture
ce qui donne un effet d'effacement, mais aussi permet que l'algo ne soit pas trompé par des reste d'images pour la prochaine decoupe ..
on est ainsi sur , de recommencer avec un champ nettoyé
en meme temps,
dans le debug j'affiche les coordonnées de chaque image "récupérées" , ce qui prouve bien que je recupere les coordonées de chaque "image"
des fois ça peut planter lorsque mes pseudo image générées sont superposées les unes sur les autres , l'algo va considérer qu'il y en a plusieurs
ici j'en genere 10 par ecran
mais ça suffit pour comprendre le principe de base
lorsque je parlais de faire en 2 fois, regarde bien, si tu veux que je commente plus dit le
le code :
Code : Tout sélectionner
;***********************************************
;Titre :*exemple_decoupe_image
;Auteur :
;Date :30/03/2017
;Heure :21:40:19
;Version Purebasic : PureBasic 5.50 (Windows - x86)
;Version de l'editeur :EPB V2.64
; Libairies necessaire : Aucune
;***********************************************
UseJPEGImageDecoder()
; *** taille fenetre ****
#Width = 1024
#Height = 768
; **********************
; les enumerations histoire que ce soit plus parlant que des chiffres ....
Enumeration
#window
#curseur
#image
EndEnumeration
;- Initialisation de DirectX
If InitSprite()=0 or InitKeyboard() = 0 Or InitMouse() = 0
MessageRequester("Erreur", "Impossible d'initialiser DirectX", 0)
CloseWindow(#window) : End
EndIf
;- Ouverture de la fenêtre et de l'écran
hwnd = OpenWindow(#window, 0, 0, #Width, #Height, "",#PB_Window_TitleBar |#PB_Window_SystemMenu )
OpenWindowedScreen(hwnd, 0, 0, 1024, 768, 0, 0, 0)
; on affiche des pseudo images
StartDrawing(screenOutput())
For i= 1 to 10
Box( Random(1000,1),Random(750,1),random(100,20),random(100,20) ,Rgb(random(254,125),random(254,125),random(254,125)))
Next i
StopDrawing()
FlipBuffers() ;: ClearScreen(RGB(0,0,0))
;- ** début de la boucle **********************
Repeat
ExamineMouse() ; on demande a purebasic de surveiller les event de souris !
ExamineKeyboard() ; on demande a purebasic de surveiller les event de clavier!
evnt= waitWindowEvent(2)
Select evnt
Case #PB_Event_CloseWindow
End
EndSelect
; LE SCAN !
compteur=0
; on commence par verifier en verticale
StartDrawing(screenOutput()) ; donc on va travailler dans notre image , on va lire les points
for x=0 to #Width-1
for y=0 to #Height -1
coul=point(x,y) ; recupe les couleurs de chaque point de l'image Mere
if coul<>rgb(0,0,0) and Flag_dep=0 ; on tombe sur une image puisque different du fond
y1=y
Flag_dep=1 ; on met un flag pour maintenant s'aoccuper du Y de fin d'image enfant
Endif
;
if Flag_dep=1 ; on recherche le fin d'image enfant
y2=y
if coul=rgb(0,0,0) or y2=#Height-1 ; retrouve du fond ecran , donc on est a la fin de l'image enfant
Y2=y+1 ; on recup le y2
Break 2 ; on a fini avec les verticales , on passe a l'horizontale
Endif
Endif
next y
next x
StopDrawing()
; on verifie maintenant l'horizontale
; le secret c'est de commencer par le y1 puisqu'on le connais inutile de recommencer a zero on pourrai se tromper d'image a cibler
; on regarde donc maintenant de gauche a droite a la "hauteur" de l'image enfant trouvée dans l'image Mere (ici l'ecran Screen )
Flag_dep2=0
StartDrawing(screenOutput()) ; donc on va travailler dans notre image , on va lire les points
y=(y1)
for x=0 to #Width-1
coul=point(x,y)
if coul<>rgb(0,0,0) and Flag_dep2=0
X1=x ; recup le x1 on viens de rencontrer l'image enfant
Flag_dep2=1 ; on ne s'occupe desormais que du X de fin d'image enfant
Endif
;
if Flag_dep2=1 ; tant qu'on est sur l'image Enfant
X2=x
if coul=rgb(0,0,0) or x2=#Width-1 ;on retombe sur du noir ; donc c'est la fin de l'image enfant
X2=x+1 ; on recupe X2
Flag_dep2=0
; on va mettre une box noir sur l'image trouvée pour simuler le grab
; puisque 'on a les 4 coins de notre image !!
Break 1 ; on peut se barrer d'ici
Endif
Endif
next x
Flag_dep2=0
StopDrawing()
FlipBuffers()
delay(50) ; j'ai mis un delay pour que tu ai le temp de voir LOL
; on a tout !
If Flag_dep2=0
Debug "----------------"
debug x1
debug y1
Debug x2
Debug y2
Debug "----------------"
Debug ""
StartDrawing(screenOutput()) ;
Box(x1,y1,x2-x1,y2-y1,rgb(0,0,0)) ; les coordonées de recuperation d'une image a entrer dans un Grabimage par exemple
StopDrawing()
if (x2=>#Width-2) or (x1=0 )
MessageRequester("info","voila on a tout recuperé")
End
Endif
Endif
; on peut effacer nos variables pour le prochain grab
x1=0:y1=0:x2=0:y2=0
Flag_dep=0
Flag_dep2=0
Until KeyboardPushed(#PB_Key_Escape)
; **************** fin de boucle ************************
; ; Epb