PureBasic

Forums PureBasic
Nous sommes le Sam 25/Mai/2013 15:06

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 75 messages ]  Aller à la page 1, 2, 3, 4, 5  Suivante
Auteur Message
 Sujet du message: Découpeur d'images
MessagePosté: Dim 22/Avr/2012 17:52 
Hors ligne

Inscription: Mer 11/Nov/2009 18:17
Messages: 1251
Localisation: Poitiers (Vienne)
Vous avez une image ou ya pleins de petites images et vous avez la flemme de les découper à la main :!:
Voici un logiciel qui va découper vos images pour vous :!: , si c'est pas de la balle atomique ça :mrgreen:

Règles:

Code:
; Crée par monsieur dieppedalle le 22 avril 2012

UsePNGImageDecoder()
UsePNGImageEncoder()

Global NewList PixelImage.l()

Procedure EnregistrementPixel(CouleurPixel)
 
  AddElement(PixelImage.l())
  PixelImage.l() = CouleurPixel
 
EndProcedure

Procedure.i CreeSprite(Image, LargeurImage, HauteurImage)
 
  Static NumeroImageGenerer
 
  NumeroImageGenerer + 1
 
  X = 0
  Y = 0
 
  StartDrawing(ImageOutput(Image))
 
  ForEach PixelImage.l()
   
    Plot(X, Y, PixelImage.l())
   
    If Y <> HauteurImage - 1
      Y + 1
    Else
      X + 1
      Y = 0
    EndIf
   
  Next
 
  StopDrawing()
 
  ClearList(PixelImage.l())
 
  SaveImage(Image, "Image " + Str(NumeroImageGenerer) + ".png", #PB_ImagePlugin_PNG)
 
  ProcedureReturn NumeroImageGenerer
EndProcedure

Procedure DecoupageImage(Image, CouleurArrierPlantSprite, CouleurFeuille)
 
  ; J'initialise au départ les valeurs de coordonnées et de dimension de l'image
 
  X = 0
  Y = 0
 
  LargeurImage = ImageWidth(Image)
  HauteurImage = ImageHeight(Image)
 
  ;   Je parcours ligne à ligne le fichier image
 
  Repeat
   
    ; Je réinitialise les valeurs du sprite
   
    HauteurSprite = 0
    LargeurSprite = 0
   
    ; Je démarre la lecture du pixel de l'image
   
    StartDrawing(ImageOutput(Image))
    ;DrawingMode(#PB_2DDrawing_AlphaBlend)
    CouleurLue = Point(X, Y) ; Lecture du pixel de l'image
    StopDrawing()
   
    ;   SI je rencontre du "CouleurArrierPlantSprite",
    ;   ALORS je suis sur un sprite !
   
    If CouleurLue = CouleurArrierPlantSprite
     
      ;   Je mémorise les coordonnées actuelles
     
      SauvegardeX = X -1 ; -1 car une fois le sprite lue, je copierais celui-ci et effacerais le sprite et le remplacerais donc par du "CouleurFeuille" et je reviendrais à cette coordonnée pour lire la suite de l'image
      SauvegardeY = Y
     
      ;   Boucle secondaire pour extraire le sprite
      ;   Je boucle sur les colonnes tant que j'ai du "CouleurArrierPlantSprite"
     
      StartDrawing(ImageOutput(Image))
     
      Repeat
       
        If Y = SauvegardeY And Point(X, Y) = CouleurArrierPlantSprite ; Si le premier pixel en haut du sprite est bien "CouleurArrierPlantSprite"
         
          ; Nous enregistrons le pixel
          EnregistrementPixel(Point(X, Y))
         
          Y + 1 ; Passage au pixel suivent
         
        ElseIf Y = SauvegardeY And Point(X, Y) = CouleurFeuille ; SinonSi le premier pixel en haut du sprite n'est plus "CouleurArrierPlantSprite"
         
          ; J'enregistre la Largeur du sprite si ce n'est pas déjà fait, sinon je ne fais rien !
         
          If LargeurSprite = 0
            LargeurSprite = X - 1 - SauvegardeX ; Moins 1 car on est en dehors du sprite en horizontale puisqu'on a lu un "CouleurFeuille"
          EndIf
         
          StopDrawing()
         
          ; Je remplace le sprite par du "CouleurFeuille" pour effacer le sprite et ainsi pouvoir continuer !
         
          StartDrawing(ImageOutput(Image))
          Box(SauvegardeX + 1, SauvegardeY, LargeurSprite, HauteurSprite, CouleurFeuille) ; Moins 1 car on est en dehors du sprite en horizontale puisqu'on a lu un "CouleurFeuille"
          StopDrawing()
         
          ; Je vais maintenant crée et enregistre l'image !:
          NombreImageGenerer = CreeSprite(CreateImage(#PB_Any, LargeurSprite, HauteurSprite, 32), LargeurSprite, HauteurSprite)
         
          ; Je restitue les valeurs enregistrées avent de lire le sprite
         
          X = SauvegardeX + LargeurSprite ; Pourquoi "+ LargeurSprite" ?, bin pourquoi revenir en arrière !, autent aller de l'avent !
          Y = SauvegardeY
         
          Break ; Mon sprite est complet, donc on retourne à la ligne mémorisée pour passer éventuellement au sprite horizontal suivant
         
        ElseIf Point(X, Y) = CouleurFeuille ; On est à maintenant à l'extrémité du sprite !
         
          ; On enregistre pas le pixel puisque c'est en dehors du sprite !
         
          ; J'enregistre la hauteur du sprite si ce n'est pas déjà fait, sinon je ne fait rien !
         
          If HauteurSprite = 0
            HauteurSprite = Y - SauvegardeY
          EndIf
         
          X + 1 ; On ajoute 1 en horizontale pour lire la ligne suivante du sprite
          Y = SauvegardeY ; On revient au coordonnées enregistrer en Y
         
        Else
          CouleurLue = Point(X, Y) ; Lecture du pixel de l'image
         
          ; Nous enregistrons le pixel
          EnregistrementPixel(Point(X, Y))
         
          Y + 1 ; Passage au pixel suivent
         
        EndIf
       
      ForEver
     
    EndIf ; Sinon on continue !
   
    ; Si la position X est plus petit que la largeur de l'image
    If X <> LargeurImage - 1
      X + 1 ; Ont rajoute 1 à X pour lire la ligne suivente
    Else ; Sinon (Si la position X est ègale à la largeur de l'image)
      X = 0 ; On remet X à 0 pour revenir au début de l'image
      Y + 1 ; Ont rajoute 1 à Y pour lire la ligne suivente de l'image
    EndIf
   
  Until X = LargeurImage - 1 And Y = HauteurImage - 1 ; Si la position X est ègale à la largeur de l'image (- 1 car les oppérations de déssins commence à 0)
                                                      ; Et que la position Y est ègale à la Hauteur de l'image (- 1 car les oppérations de déssins commence à 0)
                                                      ; On a terminé la lecture de l'image !
                                                     
  ProcedureReturn NombreImageGenerer
                                                     
EndProcedure

#Image = 1
Fichier$ = "untitled.png" ; L'emplacement du fichier

Image = LoadImage(#Image, Fichier$)

If Image <> 0
 
  Image = #Image
 
  T1.d = ElapsedMilliseconds()
  NombreImageGenerer = DecoupageImage(Image, RGB(255, 0, 255), RGB(254, 255, 255))
  T2.d = ElapsedMilliseconds()
 
  Temps.d = (T2.d - T1.d) / 1000
 
  MessageRequester("Information", "      " + Str(NombreImageGenerer) + " images ont été découpée(s) en " + StrD(Temps.d, 0) + " seconde(s) !", 64)
 
 
EndIf

_________________
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php


Dernière édition par dayvid le Lun 23/Avr/2012 11:00, édité 3 fois.

Haut
 Profil  
 
 Sujet du message: Re: Découpeur d'images
MessagePosté: Dim 22/Avr/2012 18:43 
Hors ligne

Inscription: Dim 18/Avr/2004 15:04
Messages: 1486
Localisation: sud de la france
bien mais tu aurais mettre un message quand l'image a été decoupée et aussi que l'utilisateur puissent charger une image via un selecteur de fichier
une interface serait le bienvenu .

_________________
Jbernard13


Haut
 Profil  
 
 Sujet du message: Re: Découpeur d'images
MessagePosté: Dim 22/Avr/2012 18:54 
Hors ligne

Inscription: Mer 11/Nov/2009 18:17
Messages: 1251
Localisation: Poitiers (Vienne)
Tu veux pas 100 balle et un mars tant qu'on y est aussi hein ! :roll:
Je poste ici ce code ou je me suis fait ch... à le faire et à le commenter le plus possible mais non c'est pas encore bien :roll:

Un petit « Super ce code, merci ! » ou un simple « merci » est pas de trop non plus :wink:

Bon sinon ya pas écrie la poste hein alors merci d'en tenir compte :roll:
Chui pas super man juste au cas où tu ne le saurais pas !

Sinon je sais que ce code est à optimiser mais déjà je trouve que c'est sacrément bien pour un début non :P

_________________
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php


Haut
 Profil  
 
 Sujet du message: Re: Découpeur d'images
MessagePosté: Dim 22/Avr/2012 19:35 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 17/Déc/2007 12:44
Messages: 915
Localisation: Nord (France)
Citation:
bien mais ...

Implique qu'il appréci mais qu'il manque d'après lui aussi quelque chose...

Je pense t'avoir dit que par moment je n'aime pas tes réponses et celle-là en fait partie. Prend sur toi et j'ai commencé en VisualBasic et avant d'avoir des compliments j'avais eu beaucoup de critique et on progresse avec les critiques justement.

Alors calme-toi….


Haut
 Profil  
 
 Sujet du message: Re: Découpeur d'images
MessagePosté: Dim 22/Avr/2012 19:46 
Hors ligne

Inscription: Mer 11/Nov/2009 18:17
Messages: 1251
Localisation: Poitiers (Vienne)
Oui j'me suis légèrement importer et pourtant je me suis modérer :wink:
Désoler :(

_________________
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php


Haut
 Profil  
 
 Sujet du message: Re: Découpeur d'images
MessagePosté: Dim 22/Avr/2012 19:51 
Hors ligne

Inscription: Dim 18/Avr/2004 15:04
Messages: 1486
Localisation: sud de la france
GallyHC a écrit:
Citation:
bien mais ...

Implique qu'il appréci mais qu'il manque d'après lui aussi quelque chose...

Je pense t'avoir dit que par moment je n'aime pas tes réponses et celle-là en fait partie. Prend sur toi et j'ai commencé en VisualBasic et avant d'avoir des compliments j'avais eu beaucoup de critique et on progresse avec les critiques justement.

Alors calme-toi….


je suis d'accord avec toi GallyHC , ce que je voulais dire c'est qu'il manque une belle interface .

_________________
Jbernard13


Haut
 Profil  
 
 Sujet du message: Re: Découpeur d'images
MessagePosté: Dim 22/Avr/2012 19:58 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 4443
Localisation: Isere
Dayvid...tu attaques..tu t'excuses...tu attaques...tu t'excuses.. :?

Encore une fois on ne réclame pas les remerciements, ni les codes sources, ni quoi que ce soit...
Sur un forum tout est basé sur la générosité et l'offre...rien sur les obligations.

Et GallyHC a raison, ta réponse est agressive.
Alors ne te plaint pas des agressions des autres, si tu en fait de même :(

Moi au minimum, j'aurais apprécié au moins une image de test si tu veux pas faire ce que t'as demandé JB
Pour au moins comprendre ce que fait réellement ton code, tu sais bien que rien ne remplace le visuel, puisque c'est ce que tu as utilisé pour ta démo des structures :wink:
Et peut être après, si le code nous épate, nous plait, ou autre, tu auras des compliments :wink:

Toi tu en a bavé pour faire ce code, donc je suppose que tu as tout compris.
Pense à nous qui ne savons même pas quelle est ton idée, et qu'il faut que nous trouvions une image, qui soit comme ci ou comme ça ... 8O

Maintenant, encore une fois les excuses successives n'ont pas de valeur....si elle ne freine pas la génération d'une nouvelle agression :(
Je croyais que tu avais compris...cette réponse prouve que pas tout à fait...

_________________
ImageLe bonheur est une route...
Pas une destination


Haut
 Profil  
 
 Sujet du message: Re: Découpeur d'images
MessagePosté: Dim 22/Avr/2012 20:28 
Hors ligne

Inscription: Dim 18/Avr/2004 15:04
Messages: 1486
Localisation: sud de la france
je voulez juste lui donner un conseil , en plus comme a dis KCC tu as pas mis d'image test .

_________________
Jbernard13


Haut
 Profil  
 
 Sujet du message: Re: Découpeur d'images
MessagePosté: Dim 22/Avr/2012 20:29 
Hors ligne

Inscription: Mer 11/Nov/2009 18:17
Messages: 1251
Localisation: Poitiers (Vienne)
Ok je reconnais mon erreur, rien de plus a dire !

Il y a déjà une image d'éxemple :)
Ah non c'est varsi qu'elle est sur l'autre topic

Bon 0 pour moi là :x
Pourquoi faut toujours que je gache tous hein, moi ausi ça ménèrve ce genre de connerie :roll:

_________________
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php


Haut
 Profil  
 
 Sujet du message: Re: Découpeur d'images
MessagePosté: Dim 22/Avr/2012 20:38 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 13/Fév/2004 0:57
Messages: 3069
T'es sûr que ça fonctionne, j'ai téléchargé l'image de ton autre topic, il n'y a pas d'image de créé!


Haut
 Profil  
 
 Sujet du message: Re: Découpeur d'images
MessagePosté: Dim 22/Avr/2012 20:57 
Hors ligne

Inscription: Mer 11/Nov/2009 18:17
Messages: 1251
Localisation: Poitiers (Vienne)
Si si sa fonctionne mais pas avec cette image là
je la redonne ici car l'autre ne marche pas !

Il manquais des commandes, ceci notament:
Code:
UsePNGImageEncoder()


Code remis à jour !

Image dispo ici:
Image

_________________
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php


Haut
 Profil  
 
 Sujet du message: Re: Découpeur d'images
MessagePosté: Dim 22/Avr/2012 21:15 
Hors ligne

Inscription: Dim 18/Avr/2004 15:04
Messages: 1486
Localisation: sud de la france
ça, marche mais il fallait preciser qu'il fallait crée un repertoire et mettre le code + l'image dedans .
c'est pour ça qu'il manque un selecteur de fichier .

_________________
Jbernard13


Haut
 Profil  
 
 Sujet du message: Re: Découpeur d'images
MessagePosté: Dim 22/Avr/2012 21:34 
Hors ligne

Inscription: Mer 11/Nov/2009 18:17
Messages: 1251
Localisation: Poitiers (Vienne)
jbernard13 a écrit:
ça, marche mais il fallait preciser qu'il fallait crée un repertoire et mettre le code + l'image dedans .
c'est pour ça qu'il manque un selecteur de fichier .

Je comprends désoler :wink:

_________________
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php


Haut
 Profil  
 
 Sujet du message: Re: Découpeur d'images
MessagePosté: Dim 22/Avr/2012 22:07 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 13/Fév/2004 0:57
Messages: 3069
Là, je dit bravô, c'est excellent :)

Si j'ai un peu de temps, j'essaierais cet exercice.


Haut
 Profil  
 
 Sujet du message: Re: Découpeur d'images
MessagePosté: Dim 22/Avr/2012 22:27 
Hors ligne

Inscription: Mer 11/Nov/2009 18:17
Messages: 1251
Localisation: Poitiers (Vienne)
nico a écrit:
Là, je dit bravô, c'est excellent :)

Si j'ai un peu de temps, j'essaierais cet exercice.

Tu veu dire que ça te plaie :)
J'en suis heureux mais ya encore du boulot :|

Impossible de mettre en place un choix de la couleur de transparence du sprite
Par exemple je voudrais que la couleur ici violette se transforme en transparent mais je n'y parviens pas :(

Actuellement:
Code:
DecoupageImage(Image, RGB(255, 0, 255), RGB(254, 255, 255))


Je voudrait faire:
Code:
DecoupageImage(Image, RGB(255, 0, 255), RGB(254, 255, 255), RGB(255, 0, 255), )

Le dernier paramètre est la couleur qui sera transparente quand le sprite (L'image) sera crée !

Sur ce domaine je bloque :(
Et puis une fois fait, si jamais l'image contient du transparent, on gérer ça comment, un vrais casse-tête :(

J’ai besoin d’un coup de main ici si quelqu’un veut bien m’aider
car je ne sais pas du tout comment faire :)

_________________
La vie, C'est comme, Une boitte, De startis, On en voie, De toutes, Les couleurs !

Mon forum http://purebasic.forumphp3.com/index.php


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 75 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 0 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