PureBasic

Forums PureBasic
Nous sommes le Ven 25/Mai/2018 21:48

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 64 messages ]  Aller à la page 1, 2, 3, 4, 5  Suivante
Auteur Message
 Sujet du message: img_cut3
MessagePosté: Ven 29/Juil/2016 18:14 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 31/Mai/2016 9:06
Messages: 1930
voici un petit prg pour decouper des sprites (des images )
qui seraient posées n'importe comment, dans une grande image
et permet de sauver automatiquement le résultat de la découpe


le prg se présente comme ceci :
Image

[Load img] pour charger une planche de sprites
et juste apres avoir choisi une planche de sprite, le prg vous demande dans quel
dossier vous voulez que les sauvegardes se fassent ..

[couleur fond] permet de choisir la couleur du fond des sprites (par defaut c'est le pixel (1,1) )
[decoupe] , lance le protocole de decoupe , j'ai voulu qu'on puise voir tout se qui se passe , donc c'est un peu plus long
mais c'est cool de le voir bosser :)

par defaut un appuis sur [decoupe] , ne decoupe qu'une seule image
si vous entrez un nombre dans le String "Nbr SPR" ça va decouper plusieurs sprites les uns apres les autres

j'ai testé sur cette image :
Image

et sur celle-ci :
Image

si par hasard vous trouvez une image qui fasse planter mon prg , n'hesitez pas a me le dire :)


le code :

Code:
;***********************************************
;Titre  :*Img_cutter_3
;Auteur  : Zorro
;Date  :12/08/2016
;Heure  :14:45:15
;Version Purebasic :  PureBasic 5.50 (Windows - x86)
;Version de l'editeur :EPB V2.64
; Libairies necessaire : Aucune
;***********************************************


UseJPEG2000ImageDecoder()
UseJPEG2000ImageEncoder()
UseJPEGImageDecoder()
UseJPEGImageEncoder()
UsePNGImageDecoder()
UsePNGImageEncoder()
UseTGAImageDecoder()
UseTIFFImageDecoder()
;{ Windows
Enumeration
      #Win
EndEnumeration
;{ Gadgets
Enumeration
      #Text_Titre
      #Text_Auteur
      #Gadget_Button_Load
      #Gadget_Button_couleur_fond
      #Gadget_Image_couleur_fond
      #ScrollArea_4
      #ScrollArea_5
      #Gadget_Image_travail
      #Gadget_Button_decoupe
      #Gadget_Image_control
      #Gadget_Progress_bar
      #Gadget_V_H
      #Gadget_Button_selec_man
      #Text_info
      #Text_info_sprite
      #Gadget_nbr
      #Text_nbr
      #Gadget_checkbox_selection
      #image_couleur_fond
      #image_origine
      #image_buffer
      #image_sortie
      #image_sortie2
      ;
      #image_text
EndEnumeration
;{ Fonts
Enumeration
      #Font_Text_Titre
EndEnumeration
Define.l Event
Declare openwin()
Declare selection(coul_fond)
Declare decoupe(coul_fond)
Declare selectionv(coul_fond)
Declare couleur_fond(state)
Declare selection_manuel( coul_fond ,coul_marquage)


OpenWin()

Global path_prg.s=GetCurrentDirectory()
Global State ,nbr2
Global coul_marquage=Rgb(255,2,3),coul_fond
Global  yyyyy_start ; cette variable va me servir a connaitre le numero de ligne de depart du sprite trouvé !
Global state_vh=#false ,State_selec_manu=#false,Flag_sel_manu=#false

Text.s="il etait une bergere, et ri et ron , petit patapon"
Alphabet.s="a,b,c,d,e,f,g,h,i,j,k,l,m,,n,o,p,q,r,s,t,u,v,w,x,y,z,0,1,2,3,4,5,6,7,8,9, "

; **** a mettre en commentaire au deuxieme lancement ****
; if CreateImage(#image_text,800,600,32,rgb(255,255,255) ) ;
;       StartDrawing(ImageOutput(#image_text))
;             DrawingMode(#PB_2DDrawing_Default  )
;                   DrawText(1,1,text.s,$0,rgb(255,255,255))
;       StopDrawing()
;
;       SaveImage(#image_text,"image_text.png",#PB_ImagePlugin_PNG)
;       Else
;       MessageRequester("erreur","creation image texte impossible")
; Endif
; End



; ***************************************************



Repeat
      ;-boucle
      Event = WaitWindowEvent(12)
      Select Event
      Case #PB_Event_Gadget
            Select EventGadget()
            Case #Text_Titre
            Case #Gadget_Button_Load
                  im_origine.s=OpenFileRequester("charge une image",path_prg.s,"images|*.png;*.jpg;*.bmp;*.tga;*.Tiff",0)
                  If im_origine.s<>""
                        If LoadImage(#image_origine,im_origine.s)
                              CopyImage(#image_origine,#image_buffer)
                              CreateImage( #image_sortie,ImageWidth(#image_origine),ImageHeight(#image_origine),32,#PB_Image_Transparent )
                              SetGadgetState(#Gadget_Image_travail,imageId(#image_buffer))
                              Global Dim im_origine(ImageWidth(#image_origine),ImageHeight(#image_origine))
                              Global Dim im_buffer(ImageWidth(#image_origine),ImageHeight(#image_origine))
                              StartDrawing(ImageOutput(#image_origine))
                                    DrawingMode(#PB_2DDrawing_AlphaBlend )
                                    For y=0 to ImageHeight(#image_origine)-1
                                          For x=0 to ImageWidth(#image_origine)-1
                                                im_origine(x,y)=point(x,y)
                                          Next x
                                    Next y
                                    coul_fond=point(1,1)

                              StopDrawing()
                              StartDrawing(ImageOutput(#Image_couleur_fond))
                                    box(0,0,ImageWidth(#Image_couleur_fond),ImageHeight(#Image_couleur_fond),coul_fond)
                              StopDrawing()
                              SetGadgetAttribute(#scrollarea_4, #PB_ScrollArea_InnerWidth  , ImageWidth(#image_origine))
                              SetGadgetAttribute(#scrollarea_4, #PB_ScrollArea_InnerHeight  , ImageHeight(#image_origine))

                        Endif
                  Endif
                  Global path_sauv.s=PathRequester("ou sauver ?",path_prg.s)
            Case #Gadget_Button_couleur_fond
                  State=GetGadgetState(#Gadget_Button_couleur_fond)
            Case #Gadget_Button_selec_man
                  State_selec_manu=GetGadgetState(#Gadget_Button_selec_man)
            Case #Gadget_Image_couleur_fond
            Case #ScrollArea_4
            Case #gadget_v_h
                  state_vh=GetGadgetState(#gadget_v_h)
            Case #Gadget_Image_travail
            Case #Gadget_Button_decoupe
                  nbr=val(GetGadgetText(#gadget_nbr ))-1
                  if nbr=<0:nbr=0:Endif
                  For nb=nbr to 0 step -1
                        if Flag_sel_manu=#False
                              if state_vh=#PB_CheckBox_Unchecked
                                    Selection(coul_fond)
                              Else
                                    SelectionV(coul_fond)
                              Endif ;|
                                    SetGadgetState(#Gadget_Image_travail,imageId(#image_buffer))
                        Endif;<
                                    decoupe(coul_fond)
                                    Flag_sel_manu=#False
                                    SetGadgetText(#text_info, "")
                                    SetGadgetText(#gadget_nbr,str(nb) )
                                    UpdateWindow_(GadgetID(#gadget_nbr)); actualise le gadget
                                    ;WaitWindowEvent(2)
                  Next nb;]
                  SetGadgetText(#gadget_nbr,"000" )
                  UpdateWindow_(GadgetID(#gadget_nbr)) ; actualise le gadget
                  SetGadgetState(#Gadget_progress_bar,0)
            Case #Gadget_Image_control
            EndSelect
            ;
            State=GetGadgetState(#Gadget_Button_couleur_fond)
            if State=#True
                  coul_fond=couleur_fond(State)
                  SetGadgetState( #gadget_Image_couleur_fond, imageId(#Image_couleur_fond))
            Endif
            ;
            State_selec_manu=GetGadgetState(#Gadget_Button_selec_man)
            if State_selec_manu=#True
                  selection_manuel( coul_fond ,coul_marquage)
                  if State_selec_manu=2
                        decoupe(coul_fond)
                        State_selec_manu=#False
                        SetGadgetState(#gadget_button_selec_man, State_selec_manu) ; releve le bouton

                  Endif

                  SetGadgetState(#ScrollArea_5, 0)
            Endif

      Case #PB_Event_CloseWindow
            Select EventWindow()
            Case #Win
                  CloseWindow(#Win)
                  Break
            EndSelect
      EndSelect
Forever
;}
;]2
Procedure OpenWin()
      ;-OpenWindow
      If OpenWindow(#Win, 214, 10, 942, 641, "Img_Cutter3 by Zorro", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
            TextGadget(#Text_Titre, 300, 30, 260, 30, "Img_Cutter 3")
            TextGadget(#Text_Auteur, 400, 65, 260, 35, "By Zorro")
            ButtonGadget(#Gadget_Button_Load, 15, 100, 105, 25, "Load img")
            ButtonGadget(#Gadget_Button_couleur_fond, 15, 165, 105, 25, "Couleur fond",#PB_Button_Toggle   )
            TextGadget(#Text_nbr, 15, 210, 80, 35, "Nbr SPR")
            StringGadget(#Gadget_nbr,70, 200,30, 25, "000",#PB_String_Numeric   )
            CheckBoxGadget(#gadget_v_h, 15, 240, 150, 20, "Mode H/V")
            ButtonGadget(#Gadget_Button_selec_man, 15, 260, 105, 25, "Sel_man",#PB_Button_Toggle)
            ImageGadget(#Gadget_Image_couleur_fond, 135, 150, 50, 45, 0, #PB_Image_Border)
            CreateImage(#image_couleur_fond,GadgetWidth(#Gadget_Image_couleur_fond),GadgetHeight(#Gadget_Image_couleur_fond),32)
            ButtonGadget(#Gadget_Button_decoupe, 15, 300, 105, 25, "Decoupe")
            ProgressBarGadget(#Gadget_Progress_bar, 15, 360, 200, 15, 0,100)
            TextGadget(#Text_info, 15,390, 120, 15, "Zorro")
            TextGadget(#Text_info_sprite, 15,420, 120, 30, "résolution")
            ScrollAreaGadget(#ScrollArea_5, 10, 450, 200, 165, 700, 1100, 10, #PB_ScrollArea_Single)
                  ImageGadget(#Gadget_Image_control, 0, 0, 10, 10, #PB_Image_Border) ;>2
            CloseGadgetList()

            ScrollAreaGadget(#ScrollArea_4, 220, 120, 700, 550, 700, 1100, 10, #PB_ScrollArea_Single) ;
                  ImageGadget(#Gadget_Image_travail, 0, 0, 10, 10,#PB_Image_Border) ;>2
            CloseGadgetList()
            SetGadgetFont(#Text_Titre, LoadFont(#Font_Text_Titre, "Courier New", 24, #PB_Font_Bold|#PB_Font_HighQuality))
      Endif
EndProcedure
Procedure selection(coul_fond)
      ;-selection
      SetGadgetText(#text_info, "selection d'un sprite")
      StartDrawing(ImageOutput(#image_buffer))
            DrawingMode(#PB_2DDrawing_Default )
            compteur_c=0
            For y=0 to ImageHeight(#image_origine) -1
                  For x=0 to ImageWidth(#image_origine) -1
                        coul_o=point(x,y) ; regarde toutes le couleur de l'image
                        if coul_o<> coul_fond   ;and  coul_o <> coul_marquage ; tiens un sprite (une couleur est differente de la couleur du fond et du remplissage )
                              FillArea(x,y, coul_fond ,coul_marquage) ; on rempli (c'est notre pseudo selection ) l'emplacement du sprite est marqué !

                              yyyyy_start=y

                              StopDrawing();>
                              StartDrawing(ImageOutput(#image_buffer))
                                    DrawingMode(#PB_2DDrawing_Default )
                                    For y=0 to ImageHeight(#image_buffer) -1
                                          For x=0 to ImageWidth(#image_buffer) -1
                                                im_buffer(x,y)=point(x,y)
                                          Next x
                                    Next y
                              StopDrawing()
                              ProcedureReturn
                        Endif
                  Next x
            Next y
      StopDrawing()
Endprocedure


Procedure decoupe(coul_fond)
      ;-decoupe
      ;By Dobro
      SetGadgetText(#text_info, "je decoupe")
      ; le moment ou la couleur est egale a notre marquage (coul_marquage )
      x_max=0:y_max=0  :x_start=0:y_start=0 :Flag=0:coul_o=0
      SetGadgetAttribute(#Gadget_progress_bar , #PB_ProgressBar_Maximum, ImageHeight(#image_buffer) -1)
      Dim im_sortie(ImageWidth(#image_buffer),ImageHeight(#image_buffer))
      Dim im_sortie2(ImageWidth(#image_buffer),ImageHeight(#image_buffer))
      StartDrawing(ImageOutput(#image_buffer))
            DrawingMode(#PB_2DDrawing_Default )
            For y=0 to ImageHeight(#image_buffer) -1
                  For x=0 to ImageWidth(#image_buffer) -1
                        coul_o=im_buffer(x,y)
                        if coul_o= coul_marquage   ; tiens.... un sprite
                              if Flag=1
                                    if x<x_start ; au cas ou le poins de depart x serai un peu plus a gauche que prevue (cas pour un cercle par ex )
                                          x_start=x
                                    Endif
                                    if x>x_max ; prends les coordonées maximum de droite
                                          x_max=x
                                    Endif
                                    if y>y_max ; prends les coordonees maximum en bas
                                          y_max =y
                                    Endif
                              Endif
                              plot(x,y,coul_fond) ; ici on dessine dans l'image affichée (image buffer) la couleur de fond, ce qui donne l'impression qu'on efface
                              im_sortie(x,y)=im_origine(x,y) ; puisqu'on est dans la couleur de remplissage, on est sur d'etre sur le sprite , on le dessine en utilisant les vraies couleurs
                              if Flag=0  ; prends les coordonées haut gauche pour le Crop plus tard...
                                    Flag=1 ; ce flag indique qu'on viens de passer en mode "sprite trouvée"
                                    x_start=x
                                    y_start=y
                              Endif
                              compteur_line=0
                        Else ; la couleur observé ne correspond pas a un sprite (couleur de marquage)
                              ;im_sortie(x,y)=coul_fond
                        Endif
                  Next x
                  compteur_line=compteur_line+1
                  if compteur_line >= yyyyy_start +4; le compteur nous indique qu'on a fait 4 lignes, sans rencontrer de remplissage
                        SetGadgetState(#Gadget_progress_bar,0) ; on remet le progressbar a zero
                        compteur_line=0 ; on remet le compteur a zero (a zorro )
                        Flag=0
                  Endif

                  if Flag=1 and coul_o<> coul_marquage and coul_o <> coul_fond
                        SetGadgetState(#Gadget_Image_travail,imageId(#image_buffer))
                  Endif
                  SetGadgetState(#Gadget_progress_bar,y)
            Next y
      StopDrawing()

      SetGadgetState(#Gadget_Image_travail,imageId(#image_buffer)) ; met a jour l'affichage dans l'interface
      SetGadgetText(#text_info, "je redessine")
      FreeImage( #image_sortie)
      CreateImage( #image_sortie,ImageWidth(#image_origine),ImageHeight(#image_origine),32,#PB_Image_Transparent )
      StartDrawing(ImageOutput(#image_sortie))
            DrawingMode(#PB_2DDrawing_Default  )
            Box(1,1,ImageWidth(#image_sortie),ImageHeight(#image_sortie),coul_fond) ; on efface en blanc
            DrawingMode(#PB_2DDrawing_AlphaBlend )
            For y=0 to ImageHeight(#image_sortie) -1
                  For x=0 to ImageWidth(#image_sortie) -1
                        if  im_sortie(x,y)<>coul_fond
                              plot(x,y,im_sortie(x,y))
                        Else
                              plot(x,y,coul_fond)
                        Endif
                  Next x
                  SetGadgetState(#Gadget_progress_bar,y)
            Next y
      StopDrawing()
      if IsImage(im_sortie)
            FreeImage(im_sortie)
      Endif
      SetGadgetText(#text_info, "je Grab")
      if x_max-x_start>0 and  y_max-y_start>0
            GrabImage(#image_sortie, im_sortie, x_start,y_start, (x_max+1-x_start),( y_max+1-y_start))

            nbr2=nbr2+1
            SetGadgetText(#text_info, "je Sauve")
            SaveImage( im_sortie,path_sauv.s+"sprite_"+str(nbr2)+".png",#PB_ImagePlugin_PNG )
            SetGadgetAttribute(#scrollarea_5, #PB_ScrollArea_InnerWidth  , ImageWidth(#image_sortie))
            SetGadgetAttribute(#scrollarea_5, #PB_ScrollArea_InnerHeight  , ImageHeight(#image_sortie))
            SetGadgetState(#gadget_image_control,imageId( im_sortie))
            ;FreeGadget(#Text_info_sprite)
            ;TextGadget(#Text_info_sprite, 15,gadgety(#Gadget_Image_control)+GadgetHeight(#Gadget_Image_control)+10, 120, 35,str( x_max-x_start)+"x"+str(y_max-y_start))
            SetGadgetText(#Text_info_sprite,"Resolution: "+str( x_max-x_start)+"x"+str(y_max-y_start))
            SetGadgetState(#Gadget_progress_bar,0)
            SetGadgetText(#text_info, "Fini !")
      Endif

Endprocedure

Procedure selectionV(coul_fond)
      ;-selectionV
      SetGadgetText(#text_info, "selection d'un sprite")
      StartDrawing(ImageOutput(#image_buffer))
            DrawingMode(#PB_2DDrawing_Default )
            For x=0 to ImageWidth(#image_buffer) -1
                  For y=0 to ImageHeight(#image_buffer) -1
                        coul_o=point(x,y) ; regarde toutes le couleur de l'image
                        if coul_o<>coul_fond  and  coul_o <> coul_marquage ; tiens un sprite (une couleur est differente de la couleur du fond et du remplissage )
                              FillArea(x,y, coul_fond ,coul_marquage) ; on rempli (c'est notre pseudo selection ) l'emplacement du sprite est marqué !
                              yyyyy_start=y
                              StopDrawing();>
                              StartDrawing(ImageOutput(#image_buffer))
                                    DrawingMode(#PB_2DDrawing_Default )
                                    For y=0 to ImageHeight(#image_buffer) -1
                                          For x=0 to ImageWidth(#image_buffer) -1
                                                im_buffer(x,y)=point(x,y)
                                          Next x
                                    Next y
                              StopDrawing()
                              ProcedureReturn
                        Endif
                  Next y
            Next x
      StopDrawing()
Endprocedure




Procedure selection_manuel( coul_fond ,coul_marquage)
      ;-selection manu
      ;By Dobro
      If State_selec_manu=#True
            start = GetTickCount_() ; Note time of first click.  (Merci guimauve ;o) )
            GetAsyncKeyState_(#VK_LBUTTON) ; vide buffer
            Repeat : Until GetAsyncKeyState_(#VK_LBUTTON) <> 0 Or GetTickCount_() - start > GetDoubleClickTime_()
            If GetTickCount_() - start < GetDoubleClickTime_() ; Timed out!
                  GetCursorPos_(@cp.POINT)
                  GetWindowRect_(GadgetID(#Gadget_Image_travail),gr.RECT)
                  MapWindowPoints_(#Null, GadgetID(#Gadget_Image_travail), cp, 1) ; cp now contains gadget coords
                  if cp\x>0 and cp\x<GadgetWidth(#Gadget_Image_travail) and  cp\y>0 and cp\y<GadgetHeight(#Gadget_Image_travail)
                        StartDrawing(ImageOutput(#image_buffer))
                              DrawingMode(#PB_2DDrawing_Default )
                              FillArea(cp\x,cp\Y, coul_fond ,coul_marquage)
                              State_selec_manu=2
                              UpdateWindow_(GadgetID(#gadget_button_selec_man))
                        StopDrawing()

                        StartDrawing(ImageOutput(#image_buffer))
                              DrawingMode(#PB_2DDrawing_Default )
                              For y=0 to ImageHeight(#image_buffer) -1
                                    For x=0 to ImageWidth(#image_buffer) -1
                                          im_buffer(x,y)=point(x,y)
                                          if im_buffer(x,y)=coul_marquage
                                                yyyyy_start=y
                                          Endif
                                    Next x

                              Next y
                        StopDrawing()
                  Endif
            Endif
            SetGadgetState(#Gadget_Image_travail,imageId(#image_buffer))
      Endif
EndProcedure

Procedure couleur_fond(State)
      ;-Couleur_fond
      ;By Dobro
      If State=#True
            start = GetTickCount_() ; Note time of first click.  (Merci guimauve ;o) )
            GetAsyncKeyState_(#VK_LBUTTON) ; vide buffer
            Repeat : Until GetAsyncKeyState_(#VK_LBUTTON) <> 0 Or GetTickCount_() - start > GetDoubleClickTime_()
            If GetTickCount_() - start < GetDoubleClickTime_() ; Timed out!
                  GetCursorPos_(@cp.POINT)
                  GetWindowRect_(GadgetID(#Gadget_Image_travail),gr.RECT)
                  MapWindowPoints_(#Null, GadgetID(#Gadget_Image_travail), cp, 1) ; cp now contains gadget coords
                  if cp\x>0 and cp\x<GadgetWidth(#Gadget_Image_travail) and  cp\y>0 and cp\y<GadgetHeight(#Gadget_Image_travail)
                        StartDrawing(ImageOutput(#image_buffer))
                              DrawingMode(#PB_2DDrawing_Default )
                              coul_pick=point(cp\x,cp\Y) ; recupe la couleur de fond pointée
                        StopDrawing()
                        StartDrawing(ImageOutput(#Image_couleur_fond)) ; on met a jour l'image couleur de fond
                              DrawingMode(#PB_2DDrawing_Default )
                              box(0,0,ImageWidth(#Image_couleur_fond),ImageHeight(#Image_couleur_fond),coul_pick)
                        StopDrawing()
                        SetGadgetState( #gadget_Image_couleur_fond, imageId(#Image_couleur_fond)) ; attribut la couleur
                        State=#False
                        SetGadgetState(#Gadget_Button_couleur_fond, State) ; releve le bouton
                        ProcedureReturn coul_pick
                  Endif
            Endif
      Endif
EndProcedure
;EPB



le code n'est pas optimisé , mais pour ceux que ça interresse voici l'algo

on prends l'image a decouper ,
on en fait une copie (on va bosser sur la copie )
on regarde en pixel 1,1 (ou on demande a l'utilisateur) quelle est la couleur de fond
1er temps :
on scan chaque pixels de l'image (mis en tableau )
si le pixel est different on est sur un sprite , alors on le rempli d'une couleur de selection (avec Fill Area ) ici couleur rouge !!
on garde le X et le Y histoire de savoir ou se trouve le coté haut-gauche du sprite (mais si le x nouveau est plus petit que le X ancien
on garde le plus petit ;) )
on continu le scan tant qu'on est sur la couleur de selection ... si on est plus, c'est le xmax qu'on garde
pareil en y , apres ça on a les coordonées du sprite dans l'image
2eme temps :
je cree une image transparente
je parcours le tableau de pixel
si la couleur = rouge (couleur de selection )
je lis les pixel de meme coordonées de l'image d'origine (celle que j'ai gardé au debut )
et les ecrits dans l'image buffer actuel
bien sur en meme temp je peint les pixel rouge en couleur de fond (plutot blanc)
d'ou la disparition du sprite ....enfin la trace blanche que ça laisse

comme ça au prochaine Scan, le sprite n'existe plus , puisqu'il correspond a de fond ! :)
ensuite je Grab l'image buffer .. je le presente dans l'interface en donnant sa taille, et je sauve le Sprite

on recommence au prochain clique :)

_________________
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 Dim 14/Aoû/2016 7:33, édité 13 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: img_cut3
MessagePosté: Sam 30/Juil/2016 15:44 
Hors ligne

Inscription: Mer 04/Nov/2015 17:39
Messages: 918
Pas mal dobro :D
Par contre plusieurs chose:

1 - Tu utilise énormément trop de mémoire, ont peut faire large mieux.
2 - Tu ne gère pas le canal alpha se qui fais que si mon image est en canal alpha, bha les image de sortie seront découper avec un font noir !
3 - Largement trop lent !
4 - Quand le programme travail, impossible d'utiliser la fenêtre (Déplacement, redimensionnement, etc)
5 - Ne fonctionne pas sur certaine image.

Essaie avec ces images tu va tous comprendre !
http://www.aht.li/2929719/GigatMap_-_Visuel_1.png
http://www.aht.li/2929723/perso_pokemon.7z

Sinon, Beau travail !

_________________
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.


Dernière édition par Shadow le Sam 30/Juil/2016 15:55, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: img_cut3
MessagePosté: Sam 30/Juil/2016 15:51 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8374
Citation:
1 - Tu utilise énormément trop de mémoire, ont peut faire large mieux.

Montre nous donc comment.

_________________
.: Ar-S :. Tour W10 x64 - Portable W10 x64 K501U 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é: Sam 30/Juil/2016 15:54 
Hors ligne

Inscription: Mar 22/Mar/2016 10:12
Messages: 284
Localisation: En France
si tu es si fort Shadow fait nous un code meilleur que celui de Dobro


Dernière édition par Bernie le Sam 30/Juil/2016 16:49, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: img_cut3
MessagePosté: Sam 30/Juil/2016 15:55 
Hors ligne

Inscription: Mer 04/Nov/2015 17:39
Messages: 918
Ok !
http://www.aht.li/2929724/Decoupeur_dimage.7z

Note:

Ne fonctionne pas avec les images 32 bits.
Ne fonctionne pas avec les images ou les sprites n'ont pas de couleurs d'arrière plant (Ne pas confondre avec la couleur d'arrière plant de l'image).

Fonctionne avec ce style d'image là:
http://www.aht.li/2929730/untitled.png

_________________
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: img_cut3
MessagePosté: Sam 30/Juil/2016 16:25 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 31/Mai/2016 9:06
Messages: 1930
Shadow a écrit:
Ok !
Note:

Ne fonctionne pas avec les images 32 bits.
Ne fonctionne pas avec les images ou les sprites n'ont pas de couleurs d'arrière plant (Ne pas confondre avec la couleur d'arrière plant de l'image).


Fonctionne avec ce style d'image là:
http://www.aht.li/2929730/untitled.png


ben il est pas mieux que le miens alors ;)

de plus , sur ton code, j'ai une erreur ligne 153 "plot() en dehors de la zone"

mais je lui ai donné cette image a bouffer

Image

tu n'as pas pensé au gens qui comme moi on un portable, et pas de souris .. donc pas de bouton milieu !!
j'ai pu ruser en utilisant les 2 boutons ensemble, mais c'est pas evident

de plus , et la je sais pas trop pourquoi , j'ai eu un probleme avec tes accents dans tes nom de fichiers et dossiers ...
en les retirants, j'ai pu lancer ton code .

je te rappel que mon decoupeur, a pour but de montrer ce qui se passe
si je vire tout l'attirail de l'interface, tu n'aurai pas le temps de comprendre que les decoupes seraient deja finies ....

je n'ai pas chercher a optimiser, mais juste a faire un soft fun a regarder bosser
on a l'impression qu'on decolle des autocollants :)

pour ton image de taches vertes ..... heu t'a vu la résolution ??

23310 x 8700 Pixels (202.80 MPixels) (2.68) ....... :roll:
c'est pas mon code qui prends de la ram , c'est ton images !!! :lol: :lol:

_________________
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é: Sam 30/Juil/2016 16:30 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 22/Aoû/2010 15:24
Messages: 6553
Localisation: IDF (Yvelines)
Code de Dobro environ 300 lignes
Code de Shadow environ 3000 lignes.

Shadow a écrit:
2 - Tu ne gère pas le canal alpha
je lis dans tes consignes de code que l'image ne doit pas comporter de fond transparent.
Shadow a écrit:
Ne fonctionne pas avec les images 32 bits.
Image

■ "Cliquer centre pour charger une image" on ne peut pas dire que ce soit explicite. Il faut comprendre qu'il faut cliquer sur le bouton central de la souris.

■ Bilan : Il n'y a pas photo, le code de Dobro fonctionne et me découpe un sprite sheet de 19 sprite en moins de 2 secondes alors que le meme sprite sheet avec ton code a détecter et enregistrer 36 images (alors qu'il n'y en a que 19) en 9 secondes.

Sur un autre Sprite Sheet j'ai eu le message [ERREUR] Plot(): Plot() est en dehors de la zone de dessin.

Dobro 1 - Shadow 0

PS : Arrière plan et non pas Arrière plant

_________________

➽ Config PureBasic : i3, RAM 4Go, NVidia (1024 Mo), Windows 10 - PB 5.45 LTS & PB 5.62
➽ Je papote aussi sur http://purebasic.chat & http://purebasic.chat/forum

➽ Restez informé Image Pure Basic Francophone Community

➽ Sites personnels http://falsam.com & EasySprite.js

➽ Je ne répond pas aux mp


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: img_cut3
MessagePosté: Sam 30/Juil/2016 16:53 
Hors ligne

Inscription: Mar 22/Mar/2016 10:12
Messages: 284
Localisation: En France
Shadow Ton code marche pas on peux même pas charger une image :mrgreen:


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: img_cut3
MessagePosté: Sam 30/Juil/2016 18:08 
Hors ligne

Inscription: Mer 04/Nov/2015 17:39
Messages: 918
Arrête de dire n'importe quoi moi il fonctionne très bien !
Alors l'image que j'ai fournie et puis t'as qu'a lire au lieu de te foutre de ma gueule !

_________________
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: img_cut3
MessagePosté: Sam 30/Juil/2016 18:57 
Hors ligne

Inscription: Mar 22/Mar/2016 10:12
Messages: 284
Localisation: En France
Shadow a écrit:
Arrête de dire n'importe quoi moi il fonctionne très bien !
Alors l'image que j'ai fournie et puis t'as qu'a lire au lieu de te foutre de ma gueule !



Impossible de charger une image ! j'ai pas aucune boite de dialogue pour charger une image si je clique au centre ça marche pas je suis en Purebasic 64 bits sous windows 10


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: img_cut3
MessagePosté: Sam 30/Juil/2016 19:45 
Hors ligne

Inscription: Mer 04/Nov/2015 17:39
Messages: 918
Clique souris centre !

_________________
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: img_cut3
MessagePosté: Sam 30/Juil/2016 20:15 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 31/Mai/2016 9:06
Messages: 1930
Bernie a écrit:
si je clique au centre ça marche pas je suis en Purebasic 64 bits sous windows 10


il s'agit du bouton du millieu (ou sur la molette) qui sert aussi de bouton central ;)

sur portable , il faut souvent cliquer sur les 2 boutons du Pad en meme temps

_________________
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é: Sam 30/Juil/2016 21:04 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 29/Juil/2004 16:33
Messages: 2658
Localisation: . <------ ici
Personnellement je ne prend pas partie de quelqu'un, mais chez moi le code de Dobro fonctionne plus vite. ( 2, 3 secondes pour découper et créer ) c'est plus que raisonnable.







@++

_________________
Windows 10 x64, PureBasic 5.61 Beta 1 x86 & x64


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: img_cut3
MessagePosté: Sam 30/Juil/2016 22:39 
Hors ligne

Inscription: Mer 04/Nov/2015 17:39
Messages: 918
Je n'est critiquer personne, j'ai juste donnée mon avis !
Peut êtres été un peu maladroit, pour changer :roll:

Je donne un programme et je reçois des coups de bâton.
Mon programme n'est certes pas parfais c'est sur.

Je l'avais fais une époque ou j'en avais besoin.

Mais bon, oui beaucoup de code pour un programme que j'ai voulue
faire de l'époque que je trouve déjà pas mal du tout.

Je n'entre pas en compétition avec dobro qui est largement plus fort que moi, je suis
assez modeste pour me rendre compte de cela, d'ailleurs je suis pas fort tout
court mais j'ai quand même fais des petit programme pas mal pour moi.

Jme suis pas foutue de lui ni de son programme !
J'ai données des critique mais pas en mal...
Et je l'es félicité, j'ai été le premier à le faire !

Et ici pour une fois, c'est pas lui qui m'entre dedans !
Alors dobro, je redis beau travail, j'ai été le seule à le dire je crois...

Continue, améliore ton programme car il m’intéresse beaucoup moi.

_________________
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: img_cut3
MessagePosté: Dim 31/Juil/2016 1:07 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 09/Oct/2005 16:51
Messages: 8374
Juste pour info, ce qui m'a fait tiqué et c'est souvent le cas c'est ce ton arrogant :
Citation:
1 - Tu utilise énormément trop de mémoire, ont peut faire large mieux.

Non seulement tu fais fais encore des fautes de cm1 sans compter "large => largement" en fin de phrase, mais tu sorts des âneries.
Comme l'a dit zorro, ce n'est pas son prog qui bouffe de la mémoire mais la taille démesurée de ton image.
[HS]
Si tu tiens toujours a faire un générateur de map, il faut vraiment que tu penses autrement, à savoir :
utiliser un petit carré ayant une texture qui se repete (genre l'herbe) et la répéter x fois pour faire un forme.
Ensuite tu ajoute d'autres images autour qui vont faire une bordure.
ça te permettra de faire de trés grande map avec peu de petites images.
[/HS]

_________________
.: Ar-S :. Tour W10 x64 - Portable W10 x64 K501U 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 1, 2, 3, 4, 5  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


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