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

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
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
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

Re: Soft Découpe d'image
Publié : mer. 09/août/2017 19:00
par SPH
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
