Page 1 sur 2

Soft Découpe d'image

Publié : mar. 08/août/2017 20:59
par Shadow
Rebonjour à tous, ça fessais un moment, je ne fais que passé ne tirez pas !!!

Je sais plus si ça déjà été dis...
Existe t-il un soft qui permet la découpe d'image en d'autres images...

Par exemple une image composer d'objets, le soft va découper chaque objet et les mettre dans
chaque image séparer en les nommant...

Dobro avait fais un soft comme ça mais ça ne fonctionne pas pour mes images à moi.
Je voudrait découper toutes ces images:
https://www.aht.li/3102524/Pieces_Donjon.png

Il semble ne pas exister de programme pour faire ça, sur le net...

Re: Soft Découpe d'image

Publié : mar. 08/août/2017 22:36
par Ar-S
Il existe surement des tas de soft pour faire ça.
Recherche dans le forum du coté de grabimage()
img_cut3 de zorro par ici : http://www.purebasic.fr/french/viewtopi ... ge#p191294

Re: Soft Découpe d'image

Publié : mar. 08/août/2017 22:42
par Shadow
J'ai dis que le logiciel de dobro img_cut3 ne fonctionne pas sur cette image.
Merci quand même.

Re: Soft Découpe d'image

Publié : mar. 08/août/2017 23:49
par case
bah tu sais quoi faire alors.

Re: Soft Découpe d'image

Publié : mar. 08/août/2017 23:59
par Shadow
J'ai passer des heures à cherche un logiciel mais on dirait que ça n’existe pas 8O

Re: Soft Découpe d'image

Publié : mer. 09/août/2017 8:54
par SPH
Code le en purebasic :!:

Re: Soft Découpe d'image

Publié : mer. 09/août/2017 12:17
par Ar-S
Franchement tu vas encore galérer à tenter de faire un truc du genre. Ce n'est pas facile...
Je te propose une autre orientation.
Normalement une planche de sprite ou de dessins de donjon dans ton cas est utilisable
- Soit en indiquant les valeur x et y de chaque image. Et ça c'est long
- Soit on fait en sorte que les sprites soient dans des cases de même largeur / hauteur

Cette seconde solution est bien plus simple si tu désires ensuite découper tes images...

En prenant ces 4 images que j'ai mis dans des bloc de 256x256
Image

Voilà un code te permettant de les découper et de les sauver de façon auto.

Code : Tout sélectionner

; Imagetest : "http://share.ldvmultimedia.com/pieces_donjon2.png"

UsePNGImageDecoder()
UsePNGImageEncoder()

Image = LoadImage(#PB_Any,"D:\OneDrive\Documents\PB\pieces_donjon2.png")


Macro GrabSave(IDim, PosX, PosY, La, Ha)
  ;Ar-S
  StartDrawing(ImageOutput(Image))
  NewImage = GrabDrawingImage(#PB_Any,PosX,PosY,La ,Ha)
  Resultat = SaveImage(NewImage, GetCurrentDirectory()+"image"+Str(IDim)+".png" , #PB_ImagePlugin_PNG)
  StopDrawing()
EndMacro

nombredimage_surmaligne = 4
L = 256 ;largeurduneimage ; a toi de voir la largeur d'une des images à capturer
H = 256 ;hauteurduneimage ; a toi de voir la hauteur d'une des images à capturer

NBR = 1
For i = 0 To nombredimage_surmaligne-1
  Debug x
  GrabSave(i, x, 0, L, H)
  x+256
Next
Ce sera ma seule contribution à ce topic, je n'ai absolument pas le temps d'en faire plus.
Bonne chance.

Re: Soft Découpe d'image

Publié : mer. 09/août/2017 12:53
par Shadow
Merci Ar's et tu as raison, c'est ce que j'ai fait, les cases !
Sinon je vais tenter de faire un soft de découpe ou ya pas besoin de case mais seulement au moins 1 pixel de vide autour de l'image.

Je ne vais pas faire un soft comme dobro qui est je pense plus pointu.
Moi je vais juste chercher ou se situe cette marge et découper, on va bien voir...

Re: Soft Découpe d'image

Publié : mer. 09/août/2017 12:59
par Zorro
Shadow essaye de faire une decoupe de son image en utilisant mon code de decoupe ...

mais il oubli de préciser que son image est .... transparente !!
voici en réalité son image
Image

ce qu'il s'est bien garder de préciser .....
mon code etant basé sur le systeme de remplissage de Purebasic , et du systeme de lecture de la couleur d'un pixel ....

j'ai bien dit de la couleur des pixels, pas de la transparence ....
donc forcement, mon code ne peut pas marcher sur ce type d'image !!!

deuxieme difficulté ... mon code decoupe une portion d'image en utilisant une couleur de remplissage spécifique
c'est cette couleur qui fait office de Masque !
hors dans son image, le seul remplissage possible ce sont les traits....
mais comme ceux ci ne font qu'un pixel d’Épaisseur, la fonction "Fill()" de Purebasic s'arrete au moindre decalage de ligne de pixel
bref ... mon prg , ne peux en l'etat pas decouper ce genre d'image !

sauf peut etre si on epaissi le trait de ses pieces ... (je vais faire un essai pour voir )

Re: Soft Découpe d'image

Publié : mer. 09/août/2017 14:01
par Zorro
comme je le présumais, c'est bien la faible largeur de ses traits qui empeche
mon algo de fonctionner


en mettant une epaisseur aux traits (j'ai en fait rempli l'epaiseur vide de ses pieces )
voici la preuve que ça fonctionne :)

https://www.youtube.com/watch?v=aqNrzW0 ... e=youtu.be

Re: Soft Découpe d'image

Publié : mer. 09/août/2017 18:48
par case
je sais que c'est comme donner du lard a un cochon...

Code : Tout sélectionner

InitSprite()
UsePNGImageDecoder()
UsePNGImageEncoder()
i=LoadImage(#PB_Any,"Pieces_Donjon.png") ; image de travail
t=LoadImage(#PB_Any,"Pieces_Donjon.png") ; image de decoupage

Structure cut
  x.i
  y.i
  l.i
  h.i  
  pic.i
EndStructure
NewList pt.coord()
NewList ct.cut()
StartDrawing(ImageOutput(i))
x=0
y=0
c=Point(x,y) ; bg color
Repeat  
  fnd=0
  For y=0 To ImageHeight(i)-1
    If Point(x,y)<>c 
      Plot(x,y,$ffffff)
      fnd=1:Break
    EndIf      
  Next
  If fnd=1   ; object found
    AddElement(pt())
    pt()\x=x
    pt()\y=y
    minx=x
    miny=y
    maxx=x
    maxy=y
    start:
    ForEach pt()
      If pt()\x< minx
        minx=pt()\x
      EndIf
      If pt()\x> maxx
        maxx=pt()\x
      EndIf
      
      If pt()\y< miny
        miny=pt()\y
      EndIf
      If pt()\y> maxy
        maxy=pt()\y
      EndIf                        
      Plot(pt()\x,pt()\y,c) ; efface le point dans l'image      
      xx=pt()\x
      yy=pt()\y
      DeleteElement(pt())
      range=2
      For rng=1 To range
        If Point(xx-rng,yy)<>c
          AddElement(pt())
          pt()\x=xx-rng
          pt()\y=yy
          Plot(pt()\x,pt()\y,c) ; efface le point dans l'image        
        EndIf
        If Point(xx+rng,yy)<>c
          AddElement(pt())
          pt()\x=xx+rng
          pt()\y=yy
          Plot(pt()\x,pt()\y,c) ; efface le point dans l'image      
          
        EndIf
        If Point(xx,yy-rng)<>c
          AddElement(pt())
          pt()\x=xx
          pt()\y=yy-rng
          Plot(pt()\x,pt()\y,c) ; efface le point dans l'image      
        EndIf
        If Point(xx,yy+1)<>c
          AddElement(pt())
          pt()\x=xx
          pt()\y=yy+rng
          Plot(pt()\x,pt()\y,c) ; efface le point dans l'image      
        EndIf      
        If Point(xx-1,yy-rng)<>c
          AddElement(pt())
          pt()\x=xx-rng
          pt()\y=yy-rng
          Plot(pt()\x,pt()\y,c) ; efface le point dans l'image      
        EndIf
        If Point(xx+1,yy+1)<>c
          AddElement(pt())
          pt()\x=xx+rng
          pt()\y=yy+rng
          Plot(pt()\x,pt()\y,c) ; efface le point dans l'image      
        EndIf
        If Point(xx+rng,yy-rng)<>c
          AddElement(pt())
          pt()\x=xx+rng
          pt()\y=yy-rng
          Plot(pt()\x,pt()\y,c) ; efface le point dans l'image      
        EndIf
        If Point(xx-rng,yy+rng)<>c
          AddElement(pt())
          pt()\x=xx-rng
          pt()\y=yy+rng
          Plot(pt()\x,pt()\y,c) ; efface le point dans l'image      
        EndIf    
      Next
    Next
    If ListSize(pt())
      Goto start
    Else
      ;   Goto exit
      Debug Str(minx)+","+Str(miny)+","+Str(maxx)+","+Str(maxy)      
      AddElement(ct())
      ct()\x=minx
      ct()\y=miny
      ct()\l=maxx-minx+1
      ct()\h=maxy-miny+1
    EndIf    
  EndIf
  x+1  
Until x=ImageWidth(i) And y= ImageHeight(i)
StopDrawing()
SaveImage(i,"output.png",#PB_ImagePlugin_PNG)
ForEach ct()
  ct()\pic=GrabImage(t,#PB_Any,ct()\x,ct()\y,ct()\l,ct()\h)
  SaveImage(ct()\pic,"cutout_"+Str(ListIndex(ct()))+".png",#PB_ImagePlugin_PNG)
Next






Re: Soft Découpe d'image

Publié : mer. 09/août/2017 18:57
par Ar-S
Gruic, très propre :mrgreen:

Re: Soft Découpe d'image

Publié : mer. 09/août/2017 19:00
par SPH
je sais que c'est comme donner du lard a un cochon...
Ou : "donner un code a une tete de lard" :lol: :lol: 8)

OK, JE SORS :mrgreen:

Re: Soft Découpe d'image

Publié : mer. 09/août/2017 19:10
par Ollivier
case a écrit :je sais que c'est comme donner du lard a un cochon...
Je peux pas exécuter ton lard, faute de câble : c'est un fill fait maison qui remplit des figures fines (type trait, cercle, courbes, etc...) ?

Re: Soft Découpe d'image

Publié : mer. 09/août/2017 19:32
par case
Ollivier a écrit :
case a écrit :je sais que c'est comme donner du lard a un cochon...
Je peux pas exécuter ton lard, faute de câble : c'est un fill fait maison qui remplit des figures fines (type trait, cercle, courbes, etc...) ?
oui en quelque sorte un espèce de flood-fill mais grossier avec lequel en recuperant les valeurs minimum et maximum remplies j'obtiens les coordonnes de découpe

maintenant j’attends de voir ce qu'en fera shadok si il projette de faire quelque chose avec ça et qu'il coince pour une simple découpe
alors qu'il pourrait aussi simplement entrer les coordonnes a la main j'ai peur pour la suite :)