FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» Calculatrice
par papydall Hier à 22:45

» Orbites de l’ensemble de Mandelbrot
par Minibug Hier à 21:32

» Planétarium virtuel.
par Pedro Alvarez Hier à 17:07

» Demande pour Jack concernant PanExpress
par Minibug Hier à 11:04

» EPP_V01 éditeur pour Panoramic
par Minibug Mer 19 Sep 2018 - 21:03

» [RESOLU] Quelle ligne est sélectionnée dans SYNEDIT ?
par Jean Claude Mer 19 Sep 2018 - 21:02

» PanExpress : l'éditeur Panoramic avec création d'objet
par Minibug Mer 19 Sep 2018 - 15:58

» Petit coucou en passant !
par Minibug Dim 16 Sep 2018 - 15:03

» bug SEVERE fnc+sub : variables globales corrompus
par silverman Dim 16 Sep 2018 - 13:38

» Verrouiller un form en avant plan
par silverman Dim 16 Sep 2018 - 12:50

» Fin de l'aventure.
par Pedro Alvarez Sam 15 Sep 2018 - 18:16

» Demande d'explications Sur File_Write & File_writeln
par Jack Sam 15 Sep 2018 - 17:26

» MEMO avec des possibilités de commande
par Oscaribout Mer 12 Sep 2018 - 1:06

» La théorie du chaos
par jean_debord Mar 11 Sep 2018 - 9:30

» Version instantanée V 0.9.29i2 du 4/09/2018
par silverman Mer 5 Sep 2018 - 10:15

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Septembre 2018
LunMarMerJeuVenSamDim
     12
3456789
10111213141516
17181920212223
24252627282930
CalendrierCalendrier

Partagez | 
 

 Encadrement

Aller en bas 
AuteurMessage
JL35



Nombre de messages : 6326
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Encadrement   Dim 12 Aoû 2018 - 11:03

Pour encadrer une image extraite d'une autre image, photo par exemple, avec un cadre rectangulaire ou ovale, d'épaisseur et de couleur choisies (j'avais déjà fait des cadres rectangulaires) :
Code:
' Encadrement d'une partie d'image
LABEL Quit,Chimg,Savimg,Decoupe,Desfig,Desfig1,Ajuste,Appliq,Ombre,Extraire
LABEL Couleur,Aide
DIM f$,fig%,xd%,yd%,x%,y%,w%,h%,rx%,ry%,xc%,yc%,t,i%,j%,pas%,omb%
DIM ec%,r%,g%,b%,cb%,cr%,xr%,yr%,wi1%,hi1%,wi%,hi%,wo%,eb%
DIM bh%,bv%,a$,rc$,kgf$,rn%,gn%,bn%
DIM x1,y1,x2,y2,xd1,yd1,xd2,yd2
kgf$ = "C:\PANORAMIC\KGF\KGF.dll": ' <============= à ajuster

BORDER_SMALL 0: LEFT 0,160: WIDTH 0,700: HEIGHT 0,560: FONT_BOLD 0: COLOR 0,190,255,255
  ON_CLOSE 0,Quit
  bh% = WIDTH(0)-WIDTH_CLIENT(0): bv% = HEIGHT(0)-HEIGHT_CLIENT(0)
PICTURE 1: TOP 1,30: LEFT 1,0: WIDTH 1,640: HEIGHT 1,480
ALPHA 2: TOP 2,3: CAPTION 2,"Image:"
EDIT 3: LEFT 3,40: WIDTH 3,200: ON_CLICK 3,Chimg
OPEN_DIALOG 4
ALPHA 8: TOP 8,4: LEFT 8,LEFT(3)+WIDTH(3)+3
ALPHA 5: TOP 5,TOP(2): LEFT 5,LEFT(3)+WIDTH(3)+80: CAPTION 5,"Enreg.(BMP):": HIDE 5
EDIT 6: LEFT 6,LEFT(5)+80: WIDTH 6,WIDTH(3): ON_CLICK 6,Savimg: HIDE 6
SAVE_DIALOG 7: FILTER 7,"Fichier BMP|*.bmp"

IMAGE 10
IMAGE 11

FORM 12: TOP 12,0: LEFT 12,0: WIDTH 12,160: HEIGHT 12,560: BORDER_SMALL 12
  FONT_BOLD 12: COLOR 12,255,255,200
CONTAINER_OPTION 13: PARENT 13,12: TOP 13,25: WIDTH 13,140: HEIGHT 13,55
  CAPTION 13,"DÉCOUPE:": COLOR 13,255,200,200
OPTION 14: PARENT 14,13: TOP 14,15: LEFT 14,10: CAPTION 14,"Rectangle/Carré"
OPTION 15: PARENT 15,13: TOP 15,TOP(14)+16: LEFT 15,LEFT(14): CAPTION 15,"Ovale/Cercle"
  MARK_ON 14
BUTTON 16: PARENT 16,12: TOP 16,TOP(13)+HEIGHT(13): LEFT 16,25: CAPTION 16,"Tracer"
  ON_CLICK 16,Decoupe
ALPHA 20: PARENT 20,12: TOP 20,TOP(16)+35: CAPTION 20,"  ----- AJUSTAGE: -----"
BUTTON 21: PARENT 21,12: TOP 21,TOP(20)+20: WIDTH 21,25: LEFT 21,10
           CAPTION 21,CHR$(231)
BUTTON 22: PARENT 22,12: TOP 22,TOP(21): WIDTH 22,25: LEFT 22,40
           CAPTION 22,CHR$(232)
BUTTON 23: PARENT 23,12: TOP 23,TOP(22)+30: WIDTH 23,25: LEFT 23,LEFT(21)
           CAPTION 23,CHR$(233)
BUTTON 24: PARENT 24,12: TOP 24,TOP(23): WIDTH 24,25: LEFT 24,LEFT(22)
           CAPTION 24,CHR$(234)
BUTTON 25: PARENT 25,12: TOP 25,TOP(21): WIDTH 25,25: LEFT 25,LEFT(22)+30
           CAPTION 25,CHR$(246)
BUTTON 26: PARENT 26,12: TOP 26,TOP(25): WIDTH 26,25: LEFT 26,LEFT(25)+30
           CAPTION 26,CHR$(247)
           FOR i%=21 TO 26: FONT_NAME i%,"Wingdings": FONT_SIZE i%,12: ON_CLICK i%,Ajuste: NEXT i%
SPIN 27: PARENT 27,12: TOP 27,TOP(24)+3: LEFT 27,LEFT(25): WIDTH 27,38
           MIN 27,1: MAX 27,99: POSITION 27,5
ALPHA 28: PARENT 28,12: TOP 28,TOP(27)+3: LEFT 28,LEFT(27)+37: CAPTION 28,"pixels"

ALPHA 30: PARENT 30,12: TOP 30,TOP(27)+40: LEFT 30,20: CAPTION 30,"    - CADRE -"
ALPHA 31: PARENT 31,12: TOP 31,TOP(30)+20: CAPTION 31,"Épaisseur:              pixels"
SPIN 32: PARENT 32,12: TOP 32,TOP(31)-3: LEFT 32,60: WIDTH 32,40
         MIN 32,1: MAX 32,99: POSITION 32,20
         ON_CHANGE 32,Couleur
ALPHA 33: PARENT 33,12: TOP 33,TOP(32)+30: CAPTION 33,"Couleur du cadre:"

ALPHA 34: PARENT 34,12: TOP 34,TOP(33)+20: LEFT 34,15
          CAPTION 34,"R="+CHR$(10)+CHR$(10)+"G="+CHR$(10)+CHR$(10)+"B="
SPIN 35: PARENT 35,12: TOP 35,TOP(34)-3: LEFT 35,LEFT(34)+20: WIDTH 35,50
SPIN 36: PARENT 36,12: TOP 36,TOP(35)+26: LEFT 36,LEFT(35): WIDTH 36,WIDTH(35)
SPIN 37: PARENT 37,12: TOP 37,TOP(36)+26: LEFT 37,LEFT(35): WIDTH 37,WIDTH(35)
         FOR i% = 35 TO 37: MIN i%,0: MAX i%,255: NEXT i%
         POSITION 35,180: POSITION 36,80: POSITION 37,40
         FOR i% = 35 TO 37: ON_CHANGE i%,Couleur: NEXT i%
PICTURE 40: PARENT 40,12: TOP 40,TOP(35): LEFT 40,90: WIDTH 40,20: HEIGHT 40,70
            COLOR 40,POSITION(35),POSITION(36),POSITION(37)
BUTTON 41: PARENT 41,12: TOP 41,TOP(37)+30: LEFT 41,25: CAPTION 41,"Appliquer"
           ON_CLICK 41,Appliq
CONTAINER_OPTION 45: PARENT 45,12: TOP 45,TOP(41)+40: WIDTH 45,140: HEIGHT 45,35
           CAPTION 45,"Couleur de remplissage:": COLOR 45,200,255,200
OPTION 46: PARENT 46,45: TOP 46,15: LEFT 46,10: CAPTION 46,"Blanc"
OPTION 47: PARENT 47,45: TOP 47,TOP(46): LEFT 47,80: CAPTION 47,"Noir"
           MARK_ON 46
BUTTON 48: PARENT 48,12: TOP 48,TOP(45)+45: WIDTH 48,60: LEFT 48,10: CAPTION 48,"Ombrage"
           ON_CLICK 48,Ombre
SPIN 49: PARENT 49,12: TOP 49,TOP(48)+2: LEFT 49,LEFT(48)+63: WIDTH 49,35
         MIN 49,1: MAX 49,20: POSITION 49,3
ALPHA 50: PARENT 50,12: TOP 50,TOP(49)+3: LEFT 50,LEFT(49)+35: CAPTION 50,"pixels"
BUTTON 54: PARENT 54,12: TOP 54,HEIGHT(12)-80: LEFT 54,25: CAPTION 54,"Extraire"
           ON_CLICK 54,Extraire
ALPHA 55: PARENT 55,12: TOP 55,TOP(54)+30
BUTTON 60: PARENT 60,12: TOP 60,0: WIDTH 60,30: LEFT 60,WIDTH(12)-50: CAPTION 60,"?"
           FONT_SIZE 60,12: ON_CLICK 60,Aide
          
rn% = 100: gn% = 101: bn% = 102: ' couleur de bordure du cadre (noir)
GOSUB Couleur
END
' ==============================================================================
Quit:
TERMINATE
' ==============================================================================
Chimg:
  f$ = FILE_NAME$(4): ' image de fond
  TEXT 3,f$: DimJpgBmp(f$): wi1% = wi%: hi1% = hi%
  i% = wi%+bh%: j% = hi%+bv%+30
  IF i% > (SCREEN_X-WIDTH(12)) THEN i% = SCREEN_X-WIDTH(12)
  IF j% >(SCREEN_Y-30) THEN j% = SCREEN_Y-30
  WIDTH 0,i%: HEIGHT 0,j%
  WIDTH 1,wi%: HEIGHT 1,hi%
  FILE_LOAD 1,f$
  2D_TARGET_IS 1: 2D_IMAGE_COPY 10,0,0,wi%,hi%
  CAPTION 55,"": HIDE 5: HIDE 6
  CAPTION 8,STR$(wi1%)+"x"+STR$(hi1%)
  TO_FOREGROUND 12
  omb% = 0
RETURN
' ==============================================================================
Savimg:
  f$ = FILE_NAME$(7)
  IF UPPER$(FILE_EXTRACT_EXTENSION$(f$)) <> ".BMP"
      MESSAGE "Doit être au format BMP !": RETURN
  END_IF
  TEXT 6,f$
  FILE_SAVE 1,f$
RETURN
' ==============================================================================
Decoupe:
  CAPTION 0,"": 2D_IMAGE_PASTE 10,0,0
  WHILE MOUSE_LEFT_DOWN(1) = 0: PAUSE 100: END_WHILE
  xd% = MOUSE_X_LEFT_DOWN(1): yd% = MOUSE_Y_LEFT_DOWN(1): PAUSE 100
  2D_FILL_OFF
  CAPTION 0,"xd= "+STR$(xd%)+" yd= "+STR$(yd%)
  fig% = 1: IF CHECKED(15) = 1 THEN fig% = 2
  WHILE MOUSE_LEFT_UP(1) = 0
    x% = MOUSE_X_POSITION(1): y% = MOUSE_Y_POSITION(1)
    IF SCANCODE = 160: ' Maj gauche, carré ou cercle
        y% = yd%+(x%-xd%)
    END_IF
    SCANCODE = 0
    CAPTION 0,STR$(xd%)+" , "+STR$(yd%)+"  ->  "+STR$(x%)+" , "+STR$(y%)
    GOSUB Desfig
    PAUSE 100
  END_WHILE
  xd1 = xd%: yd1 = yd%: x1 = x%: y1 = y%: ' contour interne
RETURN
' ==============================================================================
Desfig:
    2D_IMAGE_PASTE 10,0,0
    2D_PEN_COLOR 255,0,255: 2D_PEN_WIDTH 2
Desfig1:
    SELECT fig%
      CASE 1: 2D_RECTANGLE xd%,yd%,x%,y%: ' carré, rectangle
      CASE 2: ' ellipse, cercle
              w% = x%-xd%: h% = y%-yd%: rx% = w%/2: ry% = h%/2
              xc% = xd%+rx%: yc% = yd%+ry%
              2D_POLY_FROM xc%+rx%,yc%
              FOR t = 0 TO 2*PI STEP PI/180
                  2D_POLY_TO xc%+rx%*COS(t),yc%+ry%*SIN(t)
              NEXT t
    END_SELECT
RETURN
' ==============================================================================
Ajuste:
  i% = NUMBER_CLICK: pas% = POSITION(27): ' pas du déplacement
  SELECT i%
      CASE 21: xd% = xd%-pas%: x% = x%-pas%
      CASE 22: xd% = xd%+pas%: x% = x%+pas%
      CASE 23: yd% = yd%-pas%: y% = y%-pas%
      CASE 24: yd% = yd%+pas%: y% = y%+pas%
      CASE 25: x% = x%+pas%: y% = y%+pas%
      CASE 26: x% = x%-pas%: y% = y%-pas%
  END_SELECT
  GOSUB Desfig
RETURN
' ==============================================================================
Couleur:
  r% = POSITION(35): g% = POSITION(36): b% = POSITION(37)
  COLOR 40,r%,g%,b%
  WIDTH 40,POSITION(32)
  2D_TARGET_IS 40: 2D_PEN_COLOR rn%,gn%,bn%: 2D_PEN_WIDTH 1
  2D_LINE 0,0,0,HEIGHT(40): 2D_LINE WIDTH(40)-1,0,WIDTH(40)-1,HEIGHT(40)
  2D_TARGET_IS 1
RETURN
' ==============================================================================
Appliq:
  WIDTH 10,wi1%: HEIGHT 10,hi1%
  ec% = POSITION(32): ' épaisseur du cadre
  r% = POSITION(35): g% = POSITION(36): b% = POSITION(37): ' couleur du cadre
  COLOR 40,r%,g%,b%
  2D_IMAGE_PASTE 10,0,0
  2D_PEN_COLOR rn%,gn%,bn%: 2D_PEN_WIDTH 1
  xd% = xd1: yd% = yd1: x% = x1: y% = y1
  GOSUB Desfig1: ' contour initial (image)
  xd2 = xd1-ec%: yd2 = yd1-ec%: x2 = x1+ec%: y2 = y1+ec%
  xd% = xd2: yd% = yd2: x% = x2: y% = y2
  GOSUB Desfig1: ' contour externe (cadre)
  cb% = bn%*65536+gn%*256+rn%: ' couleur bordure (BGR)
  cr% = b%*65536+g%*256+r%: ' couleur de remplissage
  xr% = xd1+(xd2-xd1)/2: yr% = yd2+(y2-yd2)/2
  Remplir(1,xr%,yr%,cb%,cr%)
RETURN
' ==============================================================================
Ombre:
  wo% = POSITION(49): 2D_PEN_WIDTH wo%
  eb% = wo%/2
  SELECT fig%
    CASE 1: 2D_LINE xd1,y1-eb%,xd1,yd1: 2D_POLY_TO x1-eb%,yd1
            2D_LINE xd2+eb%,y2,x2,y2: 2D_POLY_TO x2,yd2+eb%
    CASE 2
              w% = x2-xd2: h% = y2-yd2: rx% = w%/2: ry% = h%/2
              xc% = xd2+rx%: yc% = yd2+ry%
              2D_POLY_FROM xc%,yd2
              FOR t = 3*PI/2 TO 2*PI STEP PI/180
                  2D_POLY_TO xc%+rx%*COS(t),yc%+ry%*SIN(t)
              NEXT t
              FOR t = 0 TO PI/2 STEP PI/180
                  2D_POLY_TO xc%+rx%*COS(t),yc%+ry%*SIN(t)
              NEXT t
              w% = x1-xd1: h% = y1-yd1: rx% = w%/2: ry% = h%/2
              2D_POLY_FROM xc%,y1
              FOR t = PI/2 TO 3*PI/2 STEP PI/180
                  2D_POLY_TO xc%+rx%*COS(t),yc%+ry%*SIN(t)
              NEXT t
  END_SELECT
  omb% = 1
RETURN
' ==============================================================================
Extraire:
  GOSUB Appliq
  IF omb% = 1 THEN GOSUB Ombre
  wi% = x2-xd2+eb%+1: hi% = y2-yd2+1: ' dimensions de la découpe totale
  i% = yd1+(y1-yd1)/2
  FOR x% = x2+20 TO x2 STEP -1
      r%=COLOR_PIXEL_RED(1,x%,i%): g%=COLOR_PIXEL_GREEN(1,x%,i%): b%=COLOR_PIXEL_BLUE(1,x%,i%)
      IF r% = rn% AND g% = gn% AND b% = bn% THEN EXIT_FOR
  NEXT x%
  wi% = x%-xd2
  i% = xd2+(x2-xd2)/2
  FOR y% = y2+20 TO y2 STEP -1
      r%=COLOR_PIXEL_RED(1,i%,y%): g%=COLOR_PIXEL_GREEN(1,i%,y%): b%=COLOR_PIXEL_BLUE(1,i%,y%)
      IF r% = rn% AND g% = gn% AND b% = bn% THEN EXIT_FOR
  NEXT y%
  hi% = y%-yd2
  2D_IMAGE_COPY 11,xd2,yd2,xd2+wi%+1,yd2+hi%+1
  WIDTH 1,wi%: HEIGHT 1,hi%
  CLS: 2D_IMAGE_PASTE 11,0,0
  IF fig% = 2: ' ellipse
      cr% = 0: ' remplissage noir pur
      IF CHECKED(46) = 1 THEN cr%=65536*255+256*255+255: ' remplissage blanc
      Remplir(1,2,2,cb%,cr%)
      Remplir(1,wi%-2,2,cb%,cr%)
      Remplir(1,2,hi%-2,cb%,cr%)
      Remplir(1,wi%-2,hi%-2,cb%,cr%)
  END_IF
  CAPTION 55,"-> "+STR$(wi%)+ " x "+STR$(hi%)+" pixels"
  SHOW 5: SHOW 6
RETURN
' ==============================================================================
Aide:
rc$ = CHR$(13)+CHR$(10)
  a$ = "-   ENCADREMENT   D' UNE   PARTIE   D' IMAGE   -"+rc$
  a$=a$+"     =============================="+rc$+rc$
  a$=a$+"1) Choisir une image source"+rc$
  a$=a$+"2) Choisir le type de découpe, rectangle ou ovale."+rc$
  a$=a$+"3) Bouton 'Tracer' la découpe : cliquer le coin supérieur gauche,"+rc$
  a$=a$+"     déplacer sans relâcher vers le coin inférieur droit, relâcher."+rc$
  a$=a$+"     NB: en maintenant la touche 'Maj' gauche enfoncée pendant le"+rc$
  a$=a$+"           tracé, on obtient respectivement un carré ou un cercle."+rc$
  a$=a$+"4) Ajuster éventuellement la position (flèches) et les dimensions"+rc$
  a$=a$+"     (flèches de droite) de la découpe."+rc$
  a$=a$+"5) Fixer la couleur et l'épaisseur du cadre (aperçu en temps réel)."+rc$
  a$=a$+"6) Effectuer la découpe: bouton 'Appliquer': le cadre se dessine"+rc$
  a$=a$+"     autour de la découpe."+rc$
  a$=a$+"7) Pour le cas ellipse ou cercle, fixer la couleur de remplissage externe,"+rc$
  a$=a$+"     par exemple noir pur pour utilisation ultérieure comme Sprite dans"+rc$
  a$=a$+"     dans un SCENE2D (insertion du cadre dans une autre image)."+rc$
  a$=a$+"8) On peut ajouter un effet d'ombrage au cadre: surépaisseur des lignes"+rc$
  a$=a$+"     d'encadrement du côté droit, d'une valeur choisie."+rc$
  a$=a$+"9) Réaliser la découpe: bouton 'Extraire': la découpe encadrée est affichée"+rc$
  a$=a$+"     seule. Il est alors possible de la sauvegarder sous forme d'image au"+rc$
  a$=a$+"     format BMP."
  MESSAGE a$
RETURN
' ==============================================================================
SUB Remplir(p%,x%,y%,cb%,cr%)
  ' Dans le picture p%, à partir du point x%,y%, remplir de la couleur cr% la zone
  ' délimitée par la couleur de bordure cb% (Attention: format BGR)
  DIM_LOCAL res%
  DLL_ON kgf$
  CLIPBOARD_COPY p%
  res% = DLL_CALL0("LoadPicture"): ' image presse-papier -> image interne
  res% = DLL_CALL4("FloodfillPictureToBorderColor",x%,y%,cr%,cb%)
  res% = DLL_CALL0("SavePicture"): ' image interne -> presse-papier
  CLIPBOARD_PASTE p%
  DLL_OFF
END_SUB
' ==============================================================================
SUB DimJpgBmp(f$)
   ' Image JPG ou BMP exclusivement, dimensions dans wi% et hi%
   DIM_LOCAL fm$: fm$ = "C:\TEMP\Provy.bmp"
   PICTURE 1099: HIDE 1099: FILE_LOAD 1099,f$: FILE_SAVE 1099,fm$: DELETE 1099
   FILEBIN_OPEN_READ 1,fm$
      FILEBIN_POSITION 1,18: wi% = FILEBIN_READ(1)+256*FILEBIN_READ(1)
      FILEBIN_POSITION 1,22: hi% = FILEBIN_READ(1)+256*FILEBIN_READ(1)
   FILEBIN_CLOSE 1
   FILE_DELETE fm$
END_SUB
' ==============================================================================
Seule ressource externe: KGF.dll de l'ami Klaus (chemin à ajuster en tête): pour remplir une surface quelconque, bordée par une couleur donnée avec une couleur donnée.
Je ne sais pas faire en Panoramic pur (le 2D_FLOOD ne remplit qu'une surface uniforme), ou alors on peut le faire pixel par pixel, mais il faut de la patience :


Edit 19h45 petites modifs bénignes.
Lire d'abord l'aide (bouton du haut: '?') et suivre le mode opératoire.
Et salut Jean Claude, prends ton temps, c'est les vacances !


Dernière édition par JL35 le Lun 13 Aoû 2018 - 17:04, édité 6 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

Nombre de messages : 5645
Age : 64
Localisation : 83 Var
Date d'inscription : 07/05/2009

MessageSujet: Re: Encadrement   Dim 12 Aoû 2018 - 11:53

Bonjour JL35,

J'ai pas le temps aujourd'hui, mais je te promet de regarder demain.

Apparemment, cette fois il n'y aura pas de problèmes de coin. Very Happy

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
 
Encadrement
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: