Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Troncature dans une image | |
| | Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Troncature dans une image Mar 8 Aoû 2017 - 20:58 | |
| Quand dans une présentation (ici par exemple) on veut mettre une image tronquée pour n'afficher que la partie intéressante, pour ne pas encombrer. La sub découpe horizontalement la partie centrale de l'image avec des dents de scie. On donne les fichiers départ (image jpg, bmp) et résultat (bmp), et les hauteurs de la partie haute, de la partie centrale (en blanc) et de la partie basse. La somme des trois étant la hauteur de l'image résultat. (la hauteur de la partie centrale est la distance entre les crêtes des dents de scie) Ce n'est sans doute pas d'un intérêt puissant, mais ça peut peut-être servir. - Code:
-
DIM f$,fr$,h1%,h2%,h3% f$ = "C:\GRAPH\JPG\goldgate.jpg": ' image de 640 x 480 pixels fr$ = "Z:\Image.bmp": ' Image résultat, à ajuster h1% = 50: h2% = 5: h3% = 150 Coupimage(f$,h1%,h2%,h3%,fr$) END
SUB Coupimage(f$,h1%,h2%,h3%,fr$) ' Réduction d'une image dans le sens de la hauteur avec insertion d'une zone ' vide. Image f$ (Jpg ou Bmp), résultat fr$ (Bmp) ' Hauteurs h1% = partie haute, h2% partie centrale, h3% partie basse, en pixels DIM_LOCAL p%,im%,im1%,s2%,sp%,fm$,wi%,hi%,w%,x%,y% fm$ = fr$ p% = 1000: ' arbitraire PICTURE p%: HIDE p%: FILE_LOAD p%,f$: FILE_SAVE p%,fm$: ' -> bmp 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 im% = p%+1: IMAGE im% im1% = p%+2: IMAGE im1% 2D_TARGET_IS p% w% = wi%/30: ' <===== largeur des dents de scie, à moduler 2D_IMAGE_COPY im%,0,0,wi%,h1%: ' Partie haute 2D_IMAGE_COPY im1%,0,hi%-h3%,wi%,hi%: ' Partie basse CLS: HEIGHT p%,h1%+h2%+h3% 2D_IMAGE_PASTE im%,0,0: 2D_IMAGE_PASTE im1%,0,h1%+h2%: ' image tronquée FILE_SAVE p%,fm$ s2% = p%+3: SCENE2D s2%: HIDE s2%: WIDTH s2%,wi%: HEIGHT s2%,HEIGHT(p%) FILE_LOAD s2%,fm$ sp% = p%+4: SPRITE sp% CLS: WIDTH p%,wi%: HEIGHT p%,h2%+w%: COLOR p%,0,0,0: 2D_PEN_COLOR 255,255,10 FOR x% = 0 TO wi%-10 STEP w% 2D_LINE x%,w%/2,x%+w%/2,0: 2D_POLY_TO x%+w%,w%/2 NEXT x% FOR x% = 0 TO wi%-10 STEP w% 2D_LINE x%,w%+h2%,x%+w%/2,w%/2+h2%: 2D_POLY_TO x%+w%,w%+h2% NEXT x% 2D_FLOOD w%/2,w%/2,255,255,255 2D_IMAGE_COPY im%,0,0,wi%,w%+h2%: SPRITE_IMAGE_LOAD sp%,im%: ' masque -> sprite SPRITE_POSITION sp%,0,h1%-w%/2 SNAPSHOT s2%,fr$ 2D_TARGET_IS 0: DELETE p%: DELETE im%: DELETE im1%: DELETE s2% END_SUB Par exemple (résultat de l'appel donné en exemple): ----------------------- image d'origine ---------------------------------------------------------------- image résultat ------------------------------- Je reconnais que l'exemple choisi n'est pas très convaincant, j'ai pris n'importe quoi. A la place des dents de scie certains auraient peut-être mis une sinusoïde, ou autre courbe mathématique plus ou moins sophistiquée, mais je laisse ça à notre ami papydall | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Troncature dans une image Mer 9 Aoû 2017 - 4:20 | |
| - JL35 a écrit:
- ... ou autre courbe mathématique plus ou moins sophistiquée, mais je laisse ça à notre ami papydall
Juste pour le côté mathématique, voici trois SUBs 1- Fonction_Dent_De_Scie 2- Fonction_Carree 3- Fonction_Sinusoide_Redressee - Code:
-
rem ============================================================================ rem Fonctions "dent de scie" , "carrée" , "Sinusoïde redressée" rem Papydall pour JL35 rem ============================================================================ Fonction_Dent_De_Scie(10,40,8,50) Fonction_Dent_De_Scie(5,10,18,150) Fonction_Dent_De_Scie(5,10,18,170) Fonction_Dent_De_Scie(15,100,6,300) ' ------------------------------------------------------------------------------ ' Fonction_Carree(30,6,100) ' Fonction_Carree(10,18,200) ' Fonction_Carree(20,8,300) ' ------------------------------------------------------------------------------ ' Fonction_Sinusoide_Redressee(40,100,4,200) ' Fonction_Sinusoide_Redressee(15,50,12,300) ' Fonction_Sinusoide_Redressee(5,20,35,400) end rem ============================================================================ ' Paramètres : ' a : unité sur l'axe des X ' b : unité sur l'axe des Y ' n : nombre des dents ' y : ordonnée du tracé SUB Fonction_Dent_De_Scie(a,b,n,y) dim_local y1,t,p p = pi/180 2d_poly_from 0,y for t = 0 to 2*n*pi step p y1 = 2/pi*asin(cos(t)) : ' La formule de l'équation "dent de scie" 2d_poly_to a*t,y + b*y1 next t END_SUB rem ============================================================================ ' Paramètres : ' a : coté du carré ' n : nombre des carrés ' y : ordonnée du tracé SUB Fonction_Carree(a,n,y) dim_local y1,t,p p = pi/180 2d_poly_from p,y for t = 0 to n*pi+p step p y1 = sgn(sin(t)) : ' La formule de l'équation "carré" 2d_poly_to a*t,y + a*y1 next t END_SUB rem ============================================================================ ' Paramètres : ' a : unité sur l'axe des X ' b : unité sur l'axe des Y ' n : nombre d'alternances ' y : ordonnée du tracé SUB Fonction_Sinusoide_Redressee(a,b,n,y) dim_local y1,t,p p = pi/180 2d_poly_from p,y for t = 0 to n*pi+p step p y1 = abs(sin(t)) : ' La formule de l'équation "sinusoïde redressée" 2d_poly_to a*t,y - b*y1 next t END_SUB rem ============================================================================
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Troncature dans une image Mer 9 Aoû 2017 - 12:45 | |
| Comme tu le sais très bien papydall, ma remarque n'était pas complètement innocente, aussi je ne suis pas déçu par ta contribution qui ouvre des horizons, merci. Concernant la zone de séparation, il est facile dans la sub de la colorier en autre chose que du blanc pour que ce soit plus parlant, il suffit de modifier la ligne 2D_FLOOD w%/2,w%/2,r,g,b au choix. N'importe quoi sauf noir pur, qui est la couleur de transparence du sprite. On peu aussi, en plus du fond coloré, le remplir avec des hachures, croisillons, etc, du genre: - Code:
-
2D_FLOOD w%/2,w%/2,255,255,0: 2D_FILL_DIAGONAL_CROSS: 2D_FLOOD w%/2,w%/2,10,10,10 | |
| | | Contenu sponsorisé
| Sujet: Re: Troncature dans une image | |
| |
| | | | Troncature dans une image | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |