PureBasic

Forums PureBasic
Nous sommes le Dim 16/Déc/2018 9:08

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 64 messages ]  Aller à la page Précédente  1, 2, 3, 4, 5
Auteur Message
 Sujet du message: Re: img_cut3
MessagePosté: Jeu 30/Mar/2017 17:54 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 31/Mai/2016 9:06
Messages: 1930
Citation:
A B
C D
Je scan horizontalement et verticalement
Si col <> fond alors X1 = x : y1 = y
je poursuis horizontalement
Si col = fond alors X2 = x : y2 = y


ça ne vas pas ça !
il faut :
scan horizontallement seulement :
Si Col <>Fond alors X1 = x <------ ici on ne s'occupe pas de Y, car il n'y a aucun moyen de savoir a quelle hauteur commence Y
puis Si Col = Fond ou bord droit de l'image "Mere"
X2=X

il vaut mieux le faire en 2 temps , pour justement pouvoir scaner toute l'image "Mere"

ensuite Scan Verticalement seulement :
Si Line <>Fond alors Y1 = Y
puis Si Line =Fond ou bord bas de l'image "Mere"
Y2=Y

_________________
Image
Image
Site: http://stline.ddns.net/STLINE/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: img_cut3
MessagePosté: Jeu 30/Mar/2017 18:09 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8545
Bah je suis bien obligé de scanner aussi les y sinon en reste en y0

je scan tous les pixels x en y0 et si il ne trouve que du blanc il passe en x1 etc...
Quand il a trouvé x1 et x2 (on a aussi le y1 du coup) je positionne entre x1 et x2 pour trouver le y2 des qu'un pixel est blanc.
ça marche pour A et B c'est ça qui me turlupine.

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique Aude (11) Isère (38)
RESIZER GOLD : Mon logiciel de redimensionnement par lot


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: img_cut3
MessagePosté: Jeu 30/Mar/2017 20:29 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 31/Mai/2016 9:06
Messages: 1930
je suis un peu lent pour coder maintenant, que je ne code plus :lol:

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:
;***********************************************
;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


_________________
Image
Image
Site: http://stline.ddns.net/STLINE/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"


Dernière édition par Zorro le Ven 31/Mar/2017 13:45, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: img_cut3
MessagePosté: Jeu 30/Mar/2017 21:00 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8545
Merci, je regarde ça demain je reviens du sport j'ai plus de cerveau pour coder.
Bonne soirée

_________________
~~~~Règles du forum ~~~~
.: Ar-S :. Tour + portable W10 x64 PB 5.4x / 5.6x
LDV MULTIMEDIA : Dépannage informatique Aude (11) Isère (38)
RESIZER GOLD : Mon logiciel de redimensionnement par lot


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 64 messages ]  Aller à la page Précédente  1, 2, 3, 4, 5

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye