FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Encadrement (suite) Emptypar Pedro Hier à 10:37

» Un autre pense-bête...
Encadrement (suite) Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Encadrement (suite) Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Encadrement (suite) Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Encadrement (suite) Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Encadrement (suite) Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Encadrement (suite) Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Encadrement (suite) Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Encadrement (suite) Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Encadrement (suite) Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Encadrement (suite) Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Encadrement (suite) Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Encadrement (suite) Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Encadrement (suite) Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Encadrement (suite) Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier

 

 Encadrement (suite)

Aller en bas 
5 participants
AuteurMessage
JL35




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

Encadrement (suite) Empty
MessageSujet: Encadrement (suite)   Encadrement (suite) EmptySam 3 Avr 2021 - 17:38

D'un intérêt très limité, mais histoire de causer dans le calme ambiant...
Découper des bordures arrondies autour d'une image, portrait, etc.
Sous forme d'une sub, avec comme paramètres le fichier source (jpg, bmp),
l'intensité de l'arrondi (avec des limites à ne pas franchir) et le fichier résultat (bmp).
Pour blanchir les zones dégagées par l'arrondi, la sub fait appel à une fonction DLL
de l'ami Klaus "FloodfillPictureToBorderColor": remplissage par une couleur donnée
d'une zone délimitée par une couleur donnée.
(On peut le faire en panoramic, pixel par pixel, mais c'est très long, trop long).
Code:
DIM f$,e,fr$
f$ = "C:\GRAPH\JPG\TailFine.jpg": ' 433 x 577
fr$ = "C:\TEMP\Image.bmp": ' fichier résultat bmp, chemin et nom à ajuster
e = 30
Cadrarrondi(f$,e,fr$)
HEIGHT 0,640
PICTURE 1: WIDTH 1,433: HEIGHT 1,577: FILE_LOAD 1,fr$
END
' =======================================================================
SUB Cadrarrondi(f$,e,fr$)
  ' Cadre à bords arrondis autour de f$ (bmp,jpg)-> fr$ (bmp)
  ' e = distance des nouveaux coins aux bords (pixels), ~30, à tester
  IF LABEL("Arco") = 0 THEN LABEL Arco
  IF LABEL("Remplir") = 0 THEN LABEL Remplir
  DIM_LOCAL fm$,p,w,h,x1,y1,x2,y2,xc,yc,sens,r,ha,d,a,a1,a2,cb,cr,res%
  fm$ = "C:\TEMP\Img.bmp": ' fichier de manoeuvre, temporaire
  p = 900: PICTURE p: HIDE p
  FILE_LOAD p,f$: FILE_SAVE p,fm$
  FILEBIN_OPEN_READ 1,fm$
      FILEBIN_POSITION 1,18: w = FILEBIN_READ(1)+256*FILEBIN_READ(1)
      FILEBIN_POSITION 1,22: h = FILEBIN_READ(1)+256*FILEBIN_READ(1)
  FILEBIN_CLOSE 1: FILE_DELETE fm$
  WIDTH p,w: HEIGHT p,h
  2D_TARGET_IS p: 2D_PEN_COLOR 254,254,254: cb = 65536*254+256*254+254
  IF e = 0 THEN e = 30
  DEGREES
  ' horizontales
  x1 = e: x2 = w-e: d = x2-x1: r = (e*e+d*d/4)/(2*e): ' rayon des courbures
  x1 = e: y1 = e: x2 = w-e: y2 = y1: sens = 1: GOSUB Arco
  x1 = e: y1 = h-e: x2 = w-e: y2 = y1: sens = 2: GOSUB Arco
  ' verticales
  y1 = e: y2 = h-e: d = y2-y1: r = (e*e+d*d/4)/(2*e): ' rayon des courbures
  x1 = e: y1 = e: x2 = x1: y2 = h-e: sens = 1: GOSUB Arco
  x1 = w-e: y1 = e: x2 = x1: y2 = h-e: sens = 2: GOSUB Arco
  cr = 65536*255+256*255+255: ' couleur remplissage extérieur
  DLL_ON "C:\PANORAMIC\KGF\KGF.dll"  
    x1 = 2: y1 = 2: GOSUB Remplir: y1 = h-2: GOSUB Remplir
    x1 = w-2: y1 = 2: GOSUB Remplir: y1 = h-2: GOSUB Remplir
  DLL_OFF
  FILE_SAVE p,fr$
  2D_TARGET_IS 0: DELETE p
  EXIT_SUB
Arco:
  ha = r-e
  d = SQR((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)): ' distance entre les points
  a = 2*ASIN(d/(2*r)): ' angle total de l'arc
  IF x2 > x1: ' y2 = y1: sens horizontal
      xc = x1+(x2-x1)/2: yc = y1+ha: a1 = 90+a/2
      IF sens = 2 THEN yc = y1-ha: a1 = 270+a/2
  ELSE : ' x2 = x1: sens vertical
      yc = y1+(y2-y1)/2: xc = x1+ha: a1 = 180+a/2
      IF sens = 2 THEN xc = x1-ha: a1 = a/2
  END_IF
  a2 = a1-a
  2D_ARC xc,yc,r,a1,a2
RETURN
Remplir:
  CLIPBOARD_COPY p
  res% = DLL_CALL0("LoadPicture"): ' image presse-papier -> image interne
  res% = DLL_CALL4("FloodfillPictureToBorderColor",x1,y1,cr,cb)
  res% = DLL_CALL0("SavePicture"): ' image interne -> presse-papier
  CLIPBOARD_PASTE p
RETURN
END_SUB
'  ============================================================================
L'image finale a les mêmes dimensions que l'image d'origine, avec des parties effacées.

Résultat, par exemple, pour arrondir les angles :
Encadrement (suite) Image_10
Je précise que 1) l'image n'est pas truquée 2) je n'ai aucun intérêt dans le pub de Taillefine ! (comme on peut se douter).

NB plus la valeur du paramètre e (distance des nouveaux coins à ceux d'origine) est élevée et plus les courbes seront
prononcées. Il ne faut toutefois pas dépasser une certaine valeur sinon l'image sera effacée. A tester.
Revenir en haut Aller en bas
Froggy One

Froggy One


Nombre de messages : 598
Date d'inscription : 06/01/2012

Encadrement (suite) Empty
MessageSujet: Re : Encadrement (suite)   Encadrement (suite) EmptyDim 4 Avr 2021 - 18:39

Quelle modestie ! moi j'aime bien cet encadrement.
Revenir en haut Aller en bas
http://gaeldwest.wordpress.com
JL35




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

Encadrement (suite) Empty
MessageSujet: Re: Encadrement (suite)   Encadrement (suite) EmptyLun 5 Avr 2021 - 10:43

Bonjour Froggy,
ne t'y fies pas trop, c'est peut-être de la fausse modestie...
Revenir en haut Aller en bas
Froggy One

Froggy One


Nombre de messages : 598
Date d'inscription : 06/01/2012

Encadrement (suite) Empty
MessageSujet: Re: Encadrement (suite)   Encadrement (suite) EmptyLun 5 Avr 2021 - 11:00

Salut JL35. Je n'y crois pas une seconde !!! clown
Revenir en haut Aller en bas
http://gaeldwest.wordpress.com
jjn4

jjn4


Nombre de messages : 2747
Date d'inscription : 13/09/2009

Encadrement (suite) Empty
MessageSujet: Re: Encadrement (suite)   Encadrement (suite) EmptyLun 5 Avr 2021 - 19:41

Sans compter que la publicité en question est visiblement très efficace !
lol!
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
JL35




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

Encadrement (suite) Empty
MessageSujet: Re: Encadrement (suite)   Encadrement (suite) EmptyLun 5 Avr 2021 - 20:39

Bonsoir jjn4,
Alors tu aimes bien les formes arrondies...
Attention, je parle bien des bords de l'image ci-dessus, et non d'autre chose !
Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2747
Date d'inscription : 13/09/2009

Encadrement (suite) Empty
MessageSujet: Re: Encadrement (suite)   Encadrement (suite) EmptyMar 6 Avr 2021 - 16:51

Ah oui, et la photo à arrondir est d'ailleurs bien travaillée,
car pour être arrondie, alors là, elle est tout à fait arrondie !
Laughing
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
JL35




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

Encadrement (suite) Empty
MessageSujet: Re: Encadrement (suite)   Encadrement (suite) EmptyMar 6 Avr 2021 - 17:27

Alors tu me rassures, on parle bien de la même chose ! Very Happy
L'arrondi sert aussi à écarter un peu les bords pour que tout tienne dans l'image...
Revenir en haut Aller en bas
JL35




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

Encadrement (suite) Empty
MessageSujet: Re: Encadrement (suite)   Encadrement (suite) EmptyJeu 8 Avr 2021 - 12:36

J'ai modifié un peu la sub ci-dessus
- on peut moduler la couleur et l'épaisseur du cadre (1 à 20 pixels)
- on ne fait plus appel à kgf.dll pour le remplissage, c'est un peu plus long mais supposrtable:
Code:
DIM f$,fr$,w,h,x,y,x1,y1,x2,y2,xc,yc,e,r,a1,a2,d,et,ct
WIDTH 0,700: HEIGHT 0,800
PICTURE 1: TOP 1,0: LEFT 1,0: full_space 1

f$ = "C:\GRAPH\JPG\mat.jpg"
fr$ = "Z:\Result.bmp"
e = 30
et = 12: ' épaisseur trait (cadre)
ct = 65536*128+256*64: ' couleur cadre marron
Cadrarrondi(f$,fr$,e,et,ct)
width 1,380: height 1,611
full_space 1: FILE_LOAD 1,fr$
END

SUB Cadrarrondi(f$,fr$,e,et,ct)
  ' Encadrement d'une image f$ par des arcs de cercle, résultat fr$ (bmp)
  ' e = distance des coins, et = épaisseur du trait (1 à 20)
  ' ct = couleur du trait (256*256*r+256*g+b)
  ' NB: l'image résultante a les mêmes dimensions que l'image d'origine
  DIM_LOCAL fm$,p,w,h,x,y,x1,y1,d,a,Ry,r,g,b,cr,cp
  fm$ = "Z:\Img.bmp": ' fichier de manoeuvre, temporaire
  p = 900: PICTURE p: HIDE p: FILE_LOAD p,f$: FILE_SAVE p,fm$
  FILEBIN_OPEN_READ 1,fm$
      FILEBIN_POSITION 1,18: w = FILEBIN_READ(1)+256*FILEBIN_READ(1)
      FILEBIN_POSITION 1,22: h = FILEBIN_READ(1)+256*FILEBIN_READ(1)
  FILEBIN_CLOSE 1: FILE_DELETE fm$
  WIDTH p,w: HEIGHT p,h: 2D_TARGET_IS p  
  r = INT(ct/65536): g = BIN_AND(ct,65280)/256: b = BIN_AND(ct,255)
  2D_PEN_WIDTH et: 2D_PEN_COLOR r,g,b
  x = 0: y = 0
  IF et>1 THEN w = w-et: h = h-et: x = x+et/2: y = y+et/2
  x1 = x+e: y1 = y+e: ' points de rencontre dans les angles
  DEGREES
  ' Haut et bas
  d = (w-2*e)/2: Ry = (e*e+d*d)/(2*e): ' rayon haut et bas
  a = ASIN(d/Ry): ' 1/2 angle
  xc = x+w/2: yc = y+Ry: 2D_ARC xc,yc,Ry,90+a,90-a: ' en haut
  yc = y+h-Ry: 2D_ARC xc,yc,Ry,270+a,270-a: ' en bas
  ' Gauche et droite
  d = (h-2*e)/2: Ry = (e*e+d*d)/(2*e): ' rayon gauche et droite
  a = ASIN(d/Ry): ' 1/2 angle
  xc = x+Ry: yc = y+h/2: 2D_ARC xc,yc,Ry,180+a,180-a: ' à gauche
  xc = x+w-Ry: 2D_ARC xc,yc,Ry,a,0-a: ' à droite
  ' Remplissage des angles (blanc)
  IF et>1 THEN w = w+et: h = h+et
  2D_PEN_COLOR 255,255,255: ' couleur de remplissage (blanc)
  FOR y1 = 0 TO h/2: ' pixel par pixel, mais asez rapide
      FOR x1 = 0 TO w/2
          cp = 65536*COLOR_PIXEL_RED(p,x1,y1)+256*COLOR_PIXEL_GREEN(p,x1,y1)
          cp = cp+COLOR_PIXEL_BLUE(p,x1,y1): ' couleur du point
          IF cp = ct THEN EXIT_FOR: ' bord encadrement atteint
          2D_POINT x1,y1: 2D_POINT w-x1-1,y1
          2D_POINT x1,h-y1-1: 2D_POINT w-x1-1,h-y1-1
      NEXT x1
  NEXT y1  
  FILE_SAVE p,fr$: 2D_TARGET_IS 0: DELETE p
END_SUB[code][/code]
J'ai changé d'image témoin...
Encadrement (suite) Result10
Revenir en haut Aller en bas
jjn4

jjn4


Nombre de messages : 2747
Date d'inscription : 13/09/2009

Encadrement (suite) Empty
MessageSujet: Re: Encadrement (suite)   Encadrement (suite) EmptyJeu 8 Avr 2021 - 16:12

Ah oui, c'est beaucoup mieux !!!!!!!!!!!!!!!!!!!!!!!
lol!
Revenir en haut Aller en bas
http://jjn4.e-monsite.com
JL35




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

Encadrement (suite) Empty
MessageSujet: Re: Encadrement (suite)   Encadrement (suite) EmptyJeu 8 Avr 2021 - 16:29

Merci jj, je sais bien que tu parles du cadre, évidemment, impensable pour moi de croire autre chose...
et c'est vrai que c'est mieux ainsi... Wink
Revenir en haut Aller en bas
silverman

silverman


Nombre de messages : 970
Age : 52
Localisation : Picardie
Date d'inscription : 18/03/2015

Encadrement (suite) Empty
MessageSujet: Re: Encadrement (suite)   Encadrement (suite) EmptyJeu 8 Avr 2021 - 19:51

Pour gagner en vitesse tu peux calculer la position des pixels des arcs et copy/paste ligne par ligne. Papydall (je crois bien que c'est lui) a posté un exemple de tracé d'arc avec les fonctions sin/cos.
Voiçi un exemple avec des ondelettes à la place des arcs:
Code:
 DIM f$,w,h,y,fm$,p,d


create_hide


' form de travail, caché  
form 111
ANTIBUG_CREATE_HIDE(111) :' pfff...
command_target_is 111

' image
f$ = "C:\Documents and Settings\Utilisateur\Bureau\"
dir_change f$
f$="sepia.sept1895.jpg"

' obtenir la taille de l'image
fm$ = "C:\Img.bmp": ' fichier de manoeuvre, temporaire
p = 1: PICTURE p :' conteneur de l'image (caché!)
FILE_LOAD p,f$: FILE_SAVE p,fm$
FILEBIN_OPEN_READ 1,fm$
    FILEBIN_POSITION 1,18: w = FILEBIN_READ(1)+256*FILEBIN_READ(1)
    FILEBIN_POSITION 1,22: h = FILEBIN_READ(1)+256*FILEBIN_READ(1)
FILEBIN_CLOSE 1: FILE_DELETE fm$

' dimensionner le form caché à la taille de l'image
WIDTH 111,w: HEIGHT 111,h

' dimensionner le conteneur de l'image
TOP 1,0: LEFT 1,0
WIDTH 1,w: HEIGHT 1,h
FILE_LOAD 1,f$

' dimensionner le conteneur de travail
PICTURE 2: TOP 2,0: LEFT 2,0
WIDTH 2,w: HEIGHT 2,h



' copier l'image ligne par ligne dans le conteneur de travail
' ajout d'un effet d'ondelettes
degrees
image 10
for y=0 to h
 d=int(10+(sin(y*5)*10))   :' créer les ondelettes
 '
 2d_target_is 1
 2d_image_copy 10,(0 + d),y,(w - d),y+1   :' ondelettes
 '
 2d_target_is 2
 2d_image_paste 10,(0 + d), y   :' ondelettes
next y



' exporter l'image dans le form 0
' command_target_is 0
' parent 2,0
' delete 10
' delete 111 :' ça ne marche pas, le picture 2 reste rattaché au form 111, et il disparait ici
 
' exporter l'image dans le form 0, dans un nouveau picture
2d_image_copy 10,0,0,WIDTH(2),HEIGHT(2)
command_target_is 0
picture 3 : 2d_target_is 3
WIDTH 3,WIDTH(2): HEIGHT 3,HEIGHT(2)
2d_image_paste 10,0,0
show 3
'
delete 10
delete 111


create_show


WIDTH 0,WIDTH(3)+8: HEIGHT 0,HEIGHT(3)+34



END
SUB ANTIBUG_CREATE_HIDE(object%)
' Le bug : en interne, les objets ne reçoivent pas les valeurs des commandes TOP et LEFT après un CREATE_HIDE
' Les objets enfants ne sont plus affectés si le bug est corrigé sur l'objet parent
'
 dim_local x,y,w
   x=left(object%)
   y=top(object%)
   w=width(object%)
   '
   if object_type(object%)=7
      border_hide object%
   end_if
   '
   width object%,0
   '
   show object%
   '
   left object%,0-screen_x*2
   '
   if object_type(object%)=7
      border_normal object%
   end_if
   '
   width object%,w
   '
   hide object%
   '
   left object%,x
   top object%,y
END_SUB
Revenir en haut Aller en bas
JL35




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

Encadrement (suite) Empty
MessageSujet: Re: Encadrement (suite)   Encadrement (suite) EmptyJeu 8 Avr 2021 - 21:33

Merci pour le tuyau silverman, mais ça me paraît bigrement compliqué pour ce que je fais...

En fait la lenteur relative de l'exécution est due au remplissage final en blanc des zones
externes à l'encadrement, fait pixel par pixel, mais bon, c'est quelques secondes.
J'avais utilisé précédemment une fonction Klaus de remplissage, très rapide, mais c'est
un appel à une ressource externe pour un usage  vraiment ponctuel.

Je regarde néanmoins ton exemple mais déjà ça bloque au début avec un répertoire
inexistant ("C:\Documents and Settings\Utilisateur\Bureau\)...


PS Effectivement c'est intéressant, mais un peu trop complexe à intégrer dans ma petite sub...
Revenir en haut Aller en bas
Marc

Marc


Nombre de messages : 2466
Age : 63
Localisation : TOURS (37)
Date d'inscription : 17/03/2014

Encadrement (suite) Empty
MessageSujet: Re: Encadrement (suite)   Encadrement (suite) EmptyVen 9 Avr 2021 - 23:03

Merci du partage JL35 !

Bravo pour cette réalisation !

A la fin de ton code source, tu as deux balises "code" et "/code" parasites.

Bonne continuation !
Revenir en haut Aller en bas
Contenu sponsorisé





Encadrement (suite) Empty
MessageSujet: Re: Encadrement (suite)   Encadrement (suite) Empty

Revenir en haut Aller en bas
 
Encadrement (suite)
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Il est beau le robot
» FPS 3D : La suite !
» Barre de titre sans les 3 boutons
» Éditeur de texte : Mini Word
» Resultat de couleur

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: