Comment découper une planche ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Comment découper une planche ?

Message par Micoute »

Bonjour à tous,

aujourd'hui, je n'ai pas de programme à vous proposer, mais un problème d'images JPEG que je veux transformer en sprites avec GrabSprite(), l'images est composée de 65 cases dont la plus grande partie est composée de 52 cartes à jouer plus 2 jokers et un dos de carte.

L'image à une résolution de 885x500 pixels, pouvez-vous me donner la solution pour récupérer chaque image, s'il vous plaît ?

Je vous en remercie par anticipation.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
case
Messages : 1545
Inscription : lun. 10/sept./2007 11:13

Re: Comment découper une planche ?

Message par case »

assez compliqué de t'ecrire un code faisant ce travail sans plus d'infos 'taille des cartes", y a t'il un espace entre chacune d'elle et la taille de cet espace est il constant ou avoir l'image en question.
cependant la methode est d'afficher l'image, et d'utiliser grabsprite() pour recuperer chaque carte en utilisant les coordonées de chacune d'elle ou en utilisant des boucle next /for avec un multiplicateur x et y pour le faire automatiquement

exemple

Code : Tout sélectionner

spritenum =0 ; numero du sprite de depart
definir la hauteur et la largeur de chaque sprite
sprite_h=60 ; hauteur du sprite
sprite_l=40 ; largeur du sprite
;definir  l'ecart entre chaque sprite qui sera ajoute a chaque coordonees automatiquement 
ecart_sprite_h=0 ; ecart entre chaque sprite en pixels horizontalement
ecart_sprite_v=0 ; ecart entre chaque sprite en pixels verticalement
; boucle de decoupage
for y = 0 to 5 ; 6 sprites verticalement
   for x=0 to 4   ; 5 sprites horizontalement
       grabsprite(spritenum,x*sprite_l+(x*ecart_sprite_h),y*sprite_h+(y*ecart_sprite_v),sprite_l,sprite_h) 
       ; il est possible d'ajouter des options a grabsprite voir la notice pb suivant tes besoins.
      spritenum +1 ; on ajoute 1 au numero du sprite
   next
next
ImageImage
Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Comment découper une planche ?

Message par venom »

Salut Micoute et a tous.

Bon ça répond pas directement au problème mais j'avais fait un code qui récupère et affiche les carte de la dll windows (cards.dll) qui sert notamment pour le solitaire.

Le lien du post au cas où :wink: et le second exemple







@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Comment découper une planche ?

Message par Micoute »

Merci pour vos réponses, moi j'ai commencé par un modules.

Code : Tout sélectionner

DeclareModule CartesStandards
  Declare.s NomCarte(position$)
  Declare.s PositionCarte(nomCarte$)
  Declare InitCartesStandards()
EndDeclareModule

Module CartesStandards

  Global NewMap PositionCartes.s()
  Global NewMap NomCartes.s()

  Global Dim Familles.s(4)
  Global Dim Valeurs.s(13)

  Procedure InitCartesStandards()
    Familles(0) = "T"  ; Trèfle
    Familles(1) = "K"  ; Karo (Carreau)
    Familles(2) = "C"  ; Cœur
    Familles(3) = "P"  ; Pique

    Valeurs(0) = "1"   ; As
    Valeurs(1) = "2"
    Valeurs(2) = "3"
    Valeurs(3) = "4"
    Valeurs(4) = "5"
    Valeurs(5) = "6"
    Valeurs(6) = "7"
    Valeurs(7) = "8"
    Valeurs(8) = "9"
    Valeurs(9) = "10"
    Valeurs(10) = "V"
    Valeurs(11) = "D"
    Valeurs(12) = "R"

    Protected f, v, nom$, pos$, ligne, colonne

    For f = 0 To 3
      ligne = f + 1
      For v = 0 To 12
        colonne = v + 1
        nom$ = Valeurs(v) + "_" + Familles(f)
        pos$ = Str(ligne) + "_" + Str(colonne)
        PositionCartes(nom$) = pos$
        NomCartes(pos$) = nom$
      Next
    Next
  EndProcedure

  Procedure.s NomCarte(position$)
    If FindMapElement(NomCartes(), position$)
      ProcedureReturn NomCartes()
    Else
      ProcedureReturn "Inconnue"
    EndIf
  EndProcedure

  Procedure.s PositionCarte(nomCarte$)
    If FindMapElement(PositionCartes(), nomCarte$)
      ProcedureReturn PositionCartes()
    Else
      ProcedureReturn "Inconnue"
    EndIf
  EndProcedure

EndModule
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre