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
» Problème de math
par papydall Aujourd'hui à 1:53

» A propos des attributs de fichier
par papydall Hier à 14:33

» Problème de math
par Marc37 Sam 21 Oct 2017 - 23:04

» I Love You
par papydall Sam 21 Oct 2017 - 19:22

» Un petit "coucou" à tous les Panoramiciens !
par mindstorm Sam 21 Oct 2017 - 17:06

» MARK_ON déclenche un événement ON_CLICK à la place de ...
par Jean Claude Mer 18 Oct 2017 - 18:08

» mise a jour calculatrice
par joeeee2017 Mer 18 Oct 2017 - 15:57

» [solved] 3D_LINE How to ?
par Jicehel Mer 18 Oct 2017 - 11:01

» Convertisseur de base 10 de 2 à 36
par gigi75 Mar 17 Oct 2017 - 18:49

» calculatrice avec touches movibles
par joeeee2017 Dim 15 Oct 2017 - 1:11

» CORTANA
par gigi75 Sam 14 Oct 2017 - 16:32

» Calculatrice
par Jean Claude Sam 14 Oct 2017 - 12:30

» Compilateur FBPano
par jean_debord Jeu 12 Oct 2017 - 9:53

» KGF_dll - nouvelles versions
par Klaus Mar 10 Oct 2017 - 18:49

» à propos de Panoramic_Editor [Résolu]
par Klaus Mar 10 Oct 2017 - 3:19

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Octobre 2017
LunMarMerJeuVenSamDim
      1
2345678
9101112131415
16171819202122
23242526272829
3031     
CalendrierCalendrier

Partagez | 
 

 Incrustation d'une image (dans une autre)

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
JL35



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

MessageSujet: Incrustation d'une image (dans une autre)   Mer 11 Jan 2017 - 0:14

Suite au programme précédent (Crop), par exemple pour incruster une découpe d'image dans une autre image.
L'incrustation se fait en considérant la découpe comme un Sprite, et l'image de fond comme un Scene2d.
Il est donc possible de détourer l'image à incruster avec du noir pur (0,0,0 couleur de transparence des sprites) pour ne laisser apparaître que la partie intéressante de l'image.

Le détourage de la partie à incruster se fait en trois temps:
- d'abord convertir les noirs purs d'origine de l'image en 1,1,1, pour qu'ils ne soient pas transparents.
- ensuite on détoure la partie intéressante à la souris avec une couleur inhabituelle (magenta) pour trancher avec les couleurs usuelles des images.
- puis on convertit cette couleur magenta de détourage en noir pur de transparence.
Et on applique le résultat sur l'image de fond, par un clic à l'emplacement voulu: il est alors possible de positionner l'image avec précision dans les 4 directions, au pixel près.
Puis on sauvegarde le résultat dans un fichier bmp (ou le presse-papier, si pas de nom de fichier).

Le plus délicat est le détourage, ce n'est pas très facile à la souris...
On peut:
- appliquer un facteur de zoom (1 à 9) sur l'image-sprite.
- choisir la largeur de tracé.
On  peut également revenir en arrière sur plusieurs niveaux (10) en cas de fausse manoeuvre (dérapage intempestif de la souris sur l'image, ce qui arrive souvent), mais les 10 niveaux sont vite atteints, peut-être faudrait-il augmenter cette valeur.

Et toujours tout en Panoramic:
Code:

' Incrustation d'images (Scene2d + sprites) version Panoramic_Editor >= 0.9.27i10
LABEL Quit,Chf,Chs,Svf,Modlum,Posit,Posit1,Deplace,Retouche,Zoom,Fonct,Convnoir
LABEL Eclair,Detour,Desno,Retour,Transnoi,Valmid,Annmid,Valincr
DIM rt$,f$,fm$,fs$,fr$,s$,wf%,wb%,hb%,wi%,hi%,ws%,hs%,i%,j%,a$,b$,x%,y%,x1%,y1%,p%
DIM ps%,z%,rt%,gt%,bt%,nar%,fct%,h5%,mxr%,cxy,sx%,sy%,hc%
rt$ = "C:\TEMP\"
fr$ = rt$+"Image.bmp"
fm$ = rt$+"Imgtmp.bmp"
fs$ = rt$+"Sprtmp.bmp"
mxr% = 10: ' nombre maxi de retours arrière possibles (annulations)
DIM far$(mxr%)

hc% = 500: ' hauteur mini zone client
BORDER_SMALL 0: wb% = WIDTH(0)-WIDTH_CLIENT(0): hb% = HEIGHT(0)-HEIGHT_CLIENT(0)
    HEIGHT 0,hb%+hc%
    FONT_NAME 0,"Arial": FONT_BOLD 0: COLOR 0,170,255,255: CAPTION 0," -  INCRUSTATION  D' IMAGE  -"
wf% = 150
' 1)
CONTAINER 10: TOP 10,5: LEFT 10,0: WIDTH 10,wf%: HEIGHT 10,90: COLOR 10,200,255,255
ALPHA 9: PARENT 9,10: TOP 9,7: LEFT 9,wf%/2-10
        FONT_NAME 9,"Wingdings": FONT_SIZE 9,18: FONT_COLOR 9,0,0,255: CAPTION 9,CHR$(129)
ALPHA 11: PARENT 11,10: TOP 11,TOP(9)+22: LEFT 11,5: CAPTION 11,"Image de fond (jpg,bmp):"
EDIT 12:  PARENT 12,10: TOP 12,TOP(11)+15: LEFT 12,2: WIDTH 12,wf%-4: ON_CLICK 12,Chf
ALPHA 13: PARENT 13,10: TOP 13,TOP(12)+22: LEFT 13,5: CAPTION 13," w x h"

' 2)
CONTAINER 14: TOP 14,TOP(10)+HEIGHT(10)+5: LEFT 14,0: WIDTH 14,wf%: HEIGHT 14,270
              COLOR 14,255,255,200
ALPHA 18: PARENT 18,14: TOP 18,7: LEFT 18,wf%/2-10
          FONT_NAME 18,"Wingdings": FONT_SIZE 18,18: FONT_COLOR 18,0,0,255: CAPTION 18,CHR$(130)
ALPHA 15: PARENT 15,14: TOP 15,TOP(18)+22: LEFT 15,5
          a$ = "    Sprite à incruster :": CAPTION 15,a$
EDIT 16:  PARENT 16,14: TOP 16,TOP(15)+15: LEFT 16,2: WIDTH 16,WIDTH(12): ON_CLICK 16,Chs
ALPHA 17: PARENT 17,14: TOP 17,TOP(16)+22: LEFT 17,LEFT(13): CAPTION 17," w x h"
BUTTON 38: PARENT 38,14: TOP 38,TOP(17)+15: LEFT 38,15: WIDTH 38,120: ' HEIGHT 38,18
          CAPTION 38,"Outil mise en forme": ON_CLICK 38,Retouche

ALPHA 20: PARENT 20,14: TOP 20,TOP(38)+30: LEFT 20,5
          CAPTION 20,"Clic l'emplacement, puis:"
BUTTON 21: PARENT 21,14: TOP 21,TOP(20)+20: WIDTH 21,23: LEFT 21,5: CAPTION 21,CHR$(231)
BUTTON 22: PARENT 22,14: TOP 22,TOP(21): WIDTH 22,WIDTH(21): LEFT 22,LEFT(21)+26: CAPTION 22,CHR$(232)
BUTTON 23: PARENT 23,14: TOP 23,TOP(21): WIDTH 23,WIDTH(21): LEFT 23,LEFT(22)+26: CAPTION 23,CHR$(233)
BUTTON 24: PARENT 24,14: TOP 24,TOP(21): WIDTH 24,WIDTH(21): LEFT 24,LEFT(23)+26: CAPTION 24,CHR$(234)
          FOR i% = 21 TO 24: FONT_NAME i%,"Wingdings": ON_CLICK i%,Deplace: NEXT i%
SPIN 25: PARENT 25,14: TOP 25,TOP(21)+2: WIDTH 25,40: LEFT 25,LEFT(24)+25
        MIN 25,1: MAX 25,200: POSITION 25,5
       
ALPHA 26: PARENT 26,14: TOP 26,TOP(25)+30: LEFT 26,5: CAPTION 26,"Zoom x"
EDIT 27: PARENT 27,14: TOP 27,TOP(26)-3: LEFT 27,LEFT(26)+43: WIDTH 27,25: TEXT 27,"1.0"
BUTTON 28: PARENT 28,14: WIDTH 28,25: HEIGHT 28,18: TOP 28,TOP(27)+2: LEFT 28,LEFT(27)+WIDTH(27)+2
          CAPTION 28,"OK": ON_CLICK 28,Posit1
ALPHA 29: PARENT 29,14: TOP 29,TOP(26): LEFT 29,LEFT(28)+30: CAPTION 29,"(Ex: 1.2)"

ALPHA 30: PARENT 30,14: TOP 30,TOP(27)+25: LEFT 30,1: CAPTION 30,"Lumin.  Contraste Gamma"
SPIN 31: PARENT 31,14: TOP 31,TOP(30)+15: LEFT 31,0: WIDTH 31,45
SPIN 32: PARENT 32,14: TOP 32,TOP(31): LEFT 32,LEFT(31)+50: WIDTH 32,WIDTH(31)
SPIN 33: PARENT 33,14: TOP 33,TOP(31): LEFT 33,LEFT(32)+50: WIDTH 33,WIDTH(31)
        FOR i% = 31 TO 33
            MIN i%,-127: MAX i%,127: POSITION i%,0: ON_CHANGE i%,Modlum
        NEXT i%
ALPHA 34: PARENT 34,14: TOP 34,TOP(31)+25: LEFT 34,40: FONT_ITALIC 34
          CAPTION 34,"(-127 à +128)"
BUTTON 35: PARENT 35,14: TOP 35,TOP(34)+17: LEFT 35,10: WIDTH 35,wf%-20
          CAPTION 35,"Valider l'incrustation": ON_CLICK 35,Valincr
         
' 3)
CONTAINER 39: TOP 39,TOP(14)+HEIGHT(14)+5: LEFT 39,0: WIDTH 39,wf%: HEIGHT 39,120
              COLOR 39,255,180,100
ALPHA 44: PARENT 44,39: TOP 44,7: LEFT 44,wf%/2-10
          FONT_NAME 44,"Wingdings": FONT_SIZE 44,18: FONT_COLOR 44,0,0,255: CAPTION 44,CHR$(131)
ALPHA 40: PARENT 40,39: TOP 40,TOP(44)+22: LEFT 40,2
          CAPTION 40,"Sauvegarder sous (bmp) :"
EDIT 41: PARENT 41,39: TOP 41,TOP(40)+15: LEFT 41,LEFT(12): WIDTH 41,WIDTH(12)
BUTTON 42: PARENT 42,39: TOP 42,TOP(41)+25: LEFT 42,30: HEIGHT 42,20: CAPTION 42,"Enregistrer"
          ON_CLICK 42,Svf
BUTTON 43: PARENT 43,39: TOP 43,TOP(42)+25: LEFT 43,30: HEIGHT 43,20: CAPTION 43,"Quitter"
          ON_CLICK 43,Quit
' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
h5% = 380: ' Form de mise en forme du sprite
FORM 50: HIDE 50: BORDER_SMALL 50: TOP 50,TOP(14)+TOP(38)+50: LEFT 50,0: HEIGHT 50,h5%
        FONT_NAME 50,"Arial": COLOR 50,190,255,255
PANEL 51: PARENT 51,50: WIDTH 51,160: HEIGHT 51,HEIGHT(50)-hb%: COLOR 51,255,255,180
ALPHA 45: PARENT 45,51: TOP 45,3: LEFT 45,40: CAPTION 45,"Zoom x"
SPIN 46: PARENT 46,51: TOP 46,TOP(45)-3: LEFT 46,LEFT(45)+40: WIDTH 46,35
        MIN 46,1: MAX 46,9: POSITION 46,1: ON_CHANGE 46,Zoom
BUTTON 54: PARENT 54,51: TOP 54,TOP(46)+25: LEFT 54,2: WIDTH 54,WIDTH(51)-4
          HEIGHT 54,20: CAPTION 54,"Convertir les noirs en 1,1,1": ON_CLICK 54,Convnoir
ALPHA 48: PARENT 48,51: TOP 48,TOP(54)+20
          CAPTION 48," (pour différencier de la"+CHR$(10)+"            transparence 0,0,0)"
PROGRESS_BAR 55: PARENT 55,51: TOP 55,TOP(48)+28: WIDTH 55,WIDTH(51)
BUTTON 49: PARENT 49,51: TOP 49,TOP(55)+20: LEFT 49,2: WIDTH 49,WIDTH(51)-4
          HEIGHT 49,20: CAPTION 49,"Éclaircir les blancs": ON_CLICK 49,Eclair
ALPHA 56: PARENT 56,51: TOP 56,TOP(49)+28: LEFT 56,2: CAPTION 56,"Détourer avec transparence"
          FONT_BOLD 56: FONT_UNDERLINE 56
ALPHA 57: PARENT 57,51: TOP 57,TOP(56)+22: LEFT 57,5: CAPTION 57,"Pinceau            pixels"
SPIN 58: PARENT 58,51: TOP 58,TOP(57)-3: LEFT 58,45: WIDTH 58,35
        MIN 58,1: MAX 58,20: POSITION 58,1
PICTURE 59: PARENT 59,51: TOP 59,TOP(58): WIDTH 59,25: HEIGHT 59,20: LEFT 59,115
        rt% = 255: gt% = 0: bt% = 255: COLOR 59,rt%,gt%,bt%: ' couleur de tracé transparence
ALPHA 65: PARENT 65,51: TOP 65,TOP(58)+28: LEFT 65,5: CAPTION 65,"Au clic:"
CONTAINER_OPTION 71: PARENT 71,51: TOP 71,TOP(65)-10: LEFT 71,43: WIDTH 71,114: HEIGHT 71,25
          COLOR 71,255,255,140
OPTION 72: PARENT 72,71: TOP 72,10: LEFT 72,2: CAPTION 72,"Tracer"
OPTION 73: PARENT 73,71: TOP 73,TOP(72): LEFT 73,LEFT(72)+52: CAPTION 73,"Remplir"
          MARK_ON 72: ON_CLICK 72,Fonct: ON_CLICK 73,Fonct
BUTTON 67: PARENT 67,51: TOP 67,TOP(71)+30: LEFT 67,13: WIDTH 67,120: HEIGHT 67,20
        CAPTION 67,"Annuler le dernier tracé": ON_CLICK 67,Annmid
a$="Convertir le détourage coloré"+CHR$(10)+"(magenta) en noir pur"
Bouton(60,51,1,TOP(67)+30,WIDTH(51)-2,30,a$): ' appel à la Sub Bouton
        ON_CLICK 60,Transnoi
PROGRESS_BAR 61: PARENT 61,51: TOP 61,TOP(60)+HEIGHT(60): WIDTH 61,WIDTH(51)
ALPHA 62: PARENT 62,51: TOP 62,TOP(61)+25
          CAPTION 62," Sauvegarder le sprite (bmp) :"
EDIT 63: PARENT 63,51: TOP 63,TOP(62)+15: LEFT 63,2: WIDTH 63,WIDTH(51)-4
BUTTON 68: PARENT 68,51: TOP 68,TOP(63)+26: LEFT 68,35: ' WIDTH 68,70
          CAPTION 68,"OK": ON_CLICK 68,Valmid
PICTURE 70: PARENT 70,50: LEFT 70,WIDTH(51): p% = 70: ' image du sprite
          ON_CLICK p%,Detour

OPEN_DIALOG 80: FILTER 80,"Images JPG,BMP|*.jpg;*.bmp"
SAVE_DIALOG 81: FILTER 81,"Image BMP|*.bmp"

SCENE2D 100: HIDE 100: TOP 100,0: LEFT 100,wf%: ON_CLICK 100,Posit
SPRITE 100
fct% = 1: ON_MOUSE_DOWN p%,Detour: ON_MOUSE_UP p%,Retour
END
' ==============================================================================
Quit:
  IF FILE_EXISTS(fr$) = 1 THEN FILE_DELETE fr$
  IF FILE_EXISTS(fm$) = 1 THEN FILE_DELETE fm$
  IF FILE_EXISTS(fs$) = 1 THEN FILE_DELETE fs$
  FOR i% = 1 TO mxr%
      a$ = rt$+"Sav"+STR$(i%)+".bmp"
      IF FILE_EXISTS(a$) = 1 THEN FILE_DELETE a$: ' nettoyage des sauvegardes temporaires
  NEXT i%
  TERMINATE
' ==============================================================================
Chf:
  ' Choix de l'image de fond
  f$ = "": a$ = FILE_NAME$(80): IF LEN(a$)<5 THEN RETURN
  b$ = UPPER$(FILE_EXTRACT_EXTENSION$(a$))
  IF b$<>".BMP" AND b$<>".JPG"
      MESSAGE "L'image doit être du type BMP ou JPG !": RETURN
  END_IF
  TEXT 12,a$: f$ = a$
  IF b$ = ".JPG" THEN JpgToBmp(a$,fr$): f$ = fr$
  DimBmp(f$)
  WIDTH 0,wi%+wf%+wb%+1: HEIGHT 0,hi%+hb%: IF HEIGHT(0)<(hb%+hc%) THEN HEIGHT 0,hb%+hc%
  WIDTH 100,wi%: HEIGHT 100,hi%: FILE_LOAD 100,f$
  CAPTION 13," "+STR$(wi%)+" x "+STR$(hi%)
  SHOW 100
RETURN
' ==============================================================================
Chs:
  ' Choix du sprite à insérer
  s$ = "": a$ = FILE_NAME$(80): IF LEN(a$)<5 THEN RETURN
  b$ = UPPER$(FILE_EXTRACT_EXTENSION$(a$))
  IF b$<>".BMP" AND b$<>".JPG"
      MESSAGE "L'image doit être du type BMP ou JPG !": RETURN
  END_IF
  TEXT 16,a$: s$ = a$
  IF b$ = ".JPG" THEN JpgToBmp(a$,fs$): s$ = fs$
  i%=wi%: j%=hi%: DimBmp(s$): ws%=wi%: hs%=hi%: wi%=i%: hi%=j%
  CAPTION 17," "+STR$(ws%)+" x "+STR$(hs%)
RETURN
' ==============================================================================
Svf:
  ' Sauvegarde du résultat
  a$ = TEXT$(41): ' Si pas de nom de fichier, sauvegarde dans le clipboard
  IF a$ <> ""
      b$ = UPPER$(FILE_EXTRACT_EXTENSION$(a$))
      IF b$<>".BMP"
          MESSAGE "L'image doit être du type BMP !": RETURN
      END_IF
  END_IF
  SNAPSHOT 100,a$
RETURN
' ==============================================================================
Modlum:
  ' Modification luminosité, contraste et gamma du sprite
  IF s$ = "" THEN RETURN
  SPRITE_FILE_LOAD 100,s$: SPRITE_POSITION 100,x%,y%: ' régénère
  i% = NUMBER_CHANGE
  SELECT i%
      CASE 31: SPRITE_BRIGHTNESS 100,POSITION(31)
      CASE 32: SPRITE_CONTRAST 100,POSITION(32)
      CASE 33: SPRITE_GAMMA 100,POSITION(33)
  END_SELECT
RETURN
' ==============================================================================
Posit:
  ' Clic de positionnement du sprite
  x% = MOUSE_X_POSITION(100): y% = MOUSE_Y_POSITION(100): sx% = x%: sy% = y%
Posit1:
  SPRITE_FILE_LOAD 100,s$
  SPRITE_POSITION 100,sx%,sy%
  cxy = VAL(TEXT$(27)): ' facteur de zoom
  IF cxy > 0 THEN SPRITE_SCALE 100,cxy,cxy
RETURN
' ==============================================================================
Deplace:
  ps% = POSITION(25): ' pas de déplacement, en pixels
  i% = NUMBER_CLICK
  SELECT i%
      CASE 21: x% = x%-ps%
      CASE 22: x% = x%+ps%
      CASE 23: y% = y%-ps%
      CASE 24: y% = y%+ps%
  END_SELECT
  SPRITE_POSITION 100,x%,y%
RETURN
' ==============================================================================
Retouche:
  IF s$ = "" THEN RETURN
  WIDTH 50,WIDTH(51)+ws%+wb%: HEIGHT 50,hs%+hb%: IF HEIGHT(50)<h5% THEN HEIGHT 50,h5%
  WIDTH p%,ws%: HEIGHT p%,hs%: FILE_LOAD p%,s$
  CAPTION 50,s$: POSITION 46,1: z% = 1
  SHOW 50: TO_FOREGROUND 50
RETURN
' ==============================================================================
Zoom:
  CLIPBOARD_COPY p%
  z% = POSITION(46): ' niveau de zoom
  WIDTH 50,WIDTH(51)+z%*ws%+wb%
  IF HEIGHT(50)<(z%*hs%+hb%) THEN HEIGHT 50,z%*hs%+hb%
  WIDTH p%,z%*ws%: HEIGHT p%,z%*hs%: STRETCH_ON p%
  CLIPBOARD_PASTE p%
RETURN
' ==============================================================================
Fonct:
  IF CHECKED(72) = 1: ' tracé libre jusqu'au relâchement
      fct% = 1
  ELSE
      fct% = 2: ' remplissage de la zone cliquée
  END_IF
RETURN
' ==============================================================================
Convnoir:
  ' Remplacer les noirs purs (0,0,0) de l'image en 1,1,1
  IF s$ = "" THEN MESSAGE "Pas de sprite !": RETURN
  Replace_color(p%,ws%,hs%,0,0,0,1,1,1,55)
RETURN
' ==============================================================================
Eclair:
  IF s$ = "" THEN MESSAGE "Pas de sprite !": RETURN
  Eclaircir(p%,ws%,hs%,230): ' convertir en blanc pur les couleurs > 230,230,230
RETURN
' ==============================================================================
Detour:
  ' Clic dans le dessin
  x1% = MOUSE_X_POSITION(p%): y1% = MOUSE_Y_POSITION(p%)
  x1% = x1%/z%: y1% = y1%/z%
  nar% = nar%+1: IF nar%>mxr% THEN nar% = 1
  FILE_SAVE p%,rt$+"Sav"+STR$(nar%)+".bmp": ' sauvegarde préalable
  2D_TARGET_IS p%: 2D_PEN_COLOR rt%,gt%,bt%: 2D_PEN_WIDTH POSITION(58)
  IF fct% = 1: ' tracé libre
      ON_MOUSE_MOVE p%,Desno
      2D_POINT x1%,y1%
  ELSE: ' remplissage de la zone cliquée
      2D_FLOOD x1%,y1%,rt%,gt%,bt%
  END_IF
RETURN
' ==============================================================================
Desno:
  ' Déplacement (tracé)
  ON_MOUSE_MOVE p%,Desno
  x% = MOUSE_X_POSITION(p%): y% = MOUSE_Y_POSITION(p%)
  x% = x%/z%: y% = y%/z%
  IF x%<>x1% OR y%<>y1%
      nar% = nar%+1: IF nar%>mxr% THEN nar% = 1
      FILE_SAVE p%,rt$+"Sav"+STR$(nar%)+".bmp": ' sauvegarde préalable
      2D_LINE x1%,y1%,x%,y%: x1%=x%: y1%=y%
  END_IF
RETURN
' ==============================================================================
Retour:
  ' Relâchement bouton, fin de tracé
  OFF_MOUSE_MOVE p%
  2D_TARGET_IS 0
RETURN
' ==============================================================================
Transnoi:
  ' remplacer la couleur de tracé par le noir pur (transparence)
  Replace_color(p%,ws%,hs%,rt%,gt%,bt%,0,0,0,61)
RETURN
' ==============================================================================
Valmid:
  ' validation des modifs du sprite
  s$ = TEXT$(63): IF s$ = "" THEN s$ = fs$
  FILE_SAVE p%,s$
  HIDE 50
RETURN
' ==============================================================================
Annmid:
  ' Annulation du dernier tracé
  FILE_LOAD p%,rt$+"Sav"+STR$(nar%)+".bmp": ' restore état précédent
  nar% = nar%-1: IF nar% = 0 THEN nar% = 10
RETURN
' ==============================================================================
Valincr:
  ' Validation de l'incrustation
  SNAPSHOT 100,fm$: ' sauvegarde fond + sprite
  FILE_LOAD 100,fm$: ' restore comme nouvelle image de fond
  FILE_DELETE fm$
RETURN
' ==============================================================================
SUB Bouton(b%,p%,x%,y%,w%,h%,txt$)
  ' Création d'un bouton b% multilignes, parent p%
  ' txt$ (caption): lignes séparées par CHR$(10)
  DIM_LOCAL n2d%,npr%,wt%,ht%,i%,k%,a$,t$(10),l%
  PICTURE b%: PARENT b%,p%: TOP b%,y%: LEFT b%,x%: WIDTH b%,w%: HEIGHT b%,h%
  n2d% = NUMBER_2D_TARGET: npr% = NUMBER_PRINT_TARGET: PRINT_TARGET_IS b%
  2D_TARGET_IS b%: COLOR b%,210,210,210: 2D_FILL_COLOR 210,210,210
  wt% = 0: ht% = 0: l% = 0: k% = INSTR(txt$,CHR$(10))
  WHILE k%>0
      l% = l%+1: t$(l%) = LEFT$(txt$,k%-1): txt$ = RIGHT_POS$(txt$,k%+1)
      i% = TEXT_WIDTH(t$(l%),b%): IF i%>wt% THEN wt%=i%
      ht% = ht%+TEXT_HEIGHT(t$(l%),b%): k% = INSTR(txt$,CHR$(10))
  END_WHILE
  l% = l%+1: t$(l%) = txt$: i% = TEXT_WIDTH(t$(l%),b%): IF i%>wt% THEN wt%=i%
  ht% = ht%+TEXT_HEIGHT(t$(l%),b%)
  y% = (h%-ht%)/2-2: ht% = TEXT_HEIGHT(t$(l%),b%): ' centré
  FOR i% = 1 TO l%
      x% = (w%-TEXT_WIDTH(t$(i%),b%))/2: PRINT_LOCATE x%,y% : PRINT t$(i%)
      y% = y%+ht%
  NEXT i%
  2D_FILL_OFF: 2D_RECTANGLE -1,-1,w%-2,h%-2: 2D_RECTANGLE 0,0,w%-1,h%-1
  2D_TARGET_IS n2d%: PRINT_TARGET_IS npr%
END_SUB
' ==============================================================================
SUB DimBmp(f$)
  ' Image BMP, dimensions dans wi% et hi%
  FILEBIN_OPEN_READ 1,f$
    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
END_SUB
' ==============================================================================
SUB JpgToBmp(f$,fr$)
  ' Conversion image Jpg -> Bmp
  PICTURE 1099: HIDE 1099: FILE_LOAD 1099,f$: FILE_SAVE 1099,fr$: DELETE 1099
END_SUB
' ==============================================================================
SUB Eclaircir(p%,w%,h%,c%)
' Convertir en blanc pur les couleurs supérieures ou égales à c%
' ( R>=c% et G>=c% et B>=c% )
  DIM_LOCAL x%,y%,r%,g%,b%
  2D_TARGET_IS p%: 2D_PEN_COLOR 255,255,255
  FOR y% = 0 TO h%-1
      FOR x% = 0 TO w%-1
          r%=COLOR_PIXEL_RED(p%,x%,y%): g%=COLOR_PIXEL_GREEN(p%,x%,y%)
          b%=COLOR_PIXEL_BLUE(p%,x%,y%): ' couleur du point
          IF r%>=c% AND g%>=c% AND b%>=c% THEN 2D_POINT x%,y%
      NEXT x%: DISPLAY
  NEXT y%
END_SUB
' ==============================================================================
SUB Replace_color(p%,w%,h%,r%,g%,b%,r1%,g1%,b1%,pb%)
  ' Dans le picture p%, remplacer la couleur r%,g%,b% par r1%,g1%,b1% entre w% et h%
  ' pb% = Progress_bar éventuelle (si >0)
  DIM_LOCAL x%,y%,ci%,c%
  2D_TARGET_IS p%: 2D_PEN_COLOR r1%,g1%,b1%
  ci% = (r%*256+g%)*256+b%: ' couleur à remplacer
  IF pb% > 0 THEN MIN pb%,0: MAX pb%,h%-1: ' Progress_Bar
  FOR y% = 0 TO h%-1
      IF pb% > 0 THEN POSITION pb%,y%
      FOR x% = 0 TO w%-1
          c%=65536*COLOR_PIXEL_RED(p%,x%,y%)+256*COLOR_PIXEL_GREEN(p%,x%,y%)
          c% = c%+COLOR_PIXEL_BLUE(p%,x%,y%): ' couleur du point
          IF c% = ci% THEN 2D_POINT x%,y%
      NEXT x%: DISPLAY
  NEXT y%
END_SUB
' ==============================================================================
La numérotation des objets panoramic est un peu (!) fantaisiste, ça a été fait dans le désordre !

Edit 11/01 à 22h modifs dans la mise en forme du sprite, voir ci-dessous
Edit 12/01 à 22h j'ai essayé d'éclaircir un peu la présentation...
Edit 13/01 21h15 possibilité de redimensionner le sprite après insertion
Edit 15/01 22h40 modifié la sauvegarde du résultat qui n'était pas très claire...
Edit 16/01 22h40 (toujours...) suite à la toute nouvelle version de l'Éditeur


Dernière édition par JL35 le Mar 17 Jan 2017 - 0:43, édité 5 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 7994
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mer 11 Jan 2017 - 19:11

Tes deux sujets m' intéressent même si je n' ai pas trop le temps de tester tout de suite.
Ne laisse pas tomber, je m' y mets dès que j' ai fini mon déménagement
et je pense que je te harcèlerai de questions dès que j' aurai retrouvé ma connexion.
lol!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jicehel

avatar

Nombre de messages : 5858
Age : 45
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: Incrustation d'une image (dans une autre)   Mer 11 Jan 2017 - 19:33

C'est un peu pareil pour moi, je ne suis pas intervenu puisque je ne teste pas, mais ce sujet m'intéresse aussi.
Ygeronimi a raison toutefois d'intervenir. Il ne faudrait pas que tu penses que ça ne nous intéresse pas, mais désolé que mon intervention ne soit pas plus productive ou constructive
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Incrustation d'une image (dans une autre)   Mer 11 Jan 2017 - 20:06

Merci à tous les deux, mais rassurez-vous les amis, et soyez tranquille, je sais fort bien que le sujet peut intéresser certains d'entre vous sans qu'ils le manifestent forcément ici, c'est la règle du jeu, je publie avec ma conviction que ça peut être utile, et chacun en fait ce qu'il veut, comme je fais moi-même sur d'autres sujets.
Et je ne suis certainement pas en attente de compliments, j'ai passé l'âge !

J'attends surtout des demandes de précisions ou des rapports de bugs, ou des suggestions d'améliorations, et si on est satisfait, même sans le manifester, ça suffit à mon bonheur !

Et puis parfois le programme est si parfait qu'on ne peut que rester béat d'admiration ! Very Happy

Blague à part je continue d'ailleurs à modifier le programme, plus ou moins.
ygeronimi, je t'attends de pied ferme, tu m'aideras pour la suite. Mais ne comptes pas sur moi pour ton déménagement Laughing .
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 7994
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: Re   Mer 11 Jan 2017 - 20:14

Ha ben voilà...
... pourquoi dès que l' on parle déménagement on fait le vide autour de soi ?
scratch scratch scratch

Là c' est mon bailleur HLM qui veut casser mon immeuble.
Donc, déménagement où je veux (ou presque) dans le département 
et pour sa pomme (déménageurs).
Moi je regarde et je fais le contre-maître...
lol!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
jjn4

avatar

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

MessageSujet: +++   Mer 11 Jan 2017 - 20:40

Depuis que le père Noël lui a apporté ses nouveaux joujoux,
JL35 ne sent plus de joie et trouve de l'inspiration jusqu'à l'infini
dans des super programmes de gestion d'images
et va finir par nous pondre un SuperPhotoShop35
qui fera l'admiration des programmateurs de C++
Bravo JL35 ! Continue sur ta lancée !
cheers cheers cheers alien santa santa santa
Désolé de ne pas prendre le temps de  l'examiner plus en
détail. Je suis en train de me casser la tête sur un jeu.
Mais j'en viendrai à bout ! (foi de martien)
scratch alien scratch
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://jjn4.e-monsite.com
JL35



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

MessageSujet: Re: Incrustation d'une image (dans une autre)   Mer 11 Jan 2017 - 22:07

Merci jjn4, c'est trop ! mais si toi tu te casses la tête sur ton jeu, qu'est-ce que ça va être pour nous autres (quand il sera fini...) ! Very Happy

Euh, ygeronimi... finalement si c'est ça ton déménagement, je veux bien t'aider à les regarder faire, en buvant un coup à leur santé !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Incrustation d'une image (dans une autre)   Jeu 12 Jan 2017 - 0:25

J'ai fait quelques modifs là-haut, notamment dans la mise en forme de l'image (sprite) à incruster (bouton 'Retoucher le sprite')

Le problème est le détourage de l'image avec du noir pur pour la transformer en sprite avec les bords détourés transparents.
Le détourage à la main (souris) est assez laborieux et ce n'est pas toujours très facile de rattraper les erreurs (débordements).
Dans le cas d'une image à fond blanc (ou uni), comme ici:

il suffit de faire un 2D_FLOOD sur l'extérieur de la figure ...

MAIS
je m'aperçois que malgré l'apparence les fonds sont rarement blanc pur (homogène), et dans ce cas le 2D_Flood ne marche pas !
J'ai donc prévu de faire dans l'ordre:
- Convertir les noirs purs de l'image en 1,1,1, pour qu'ils ne soient pas transparents
- Éclaircir les blancs: tout ce qui dépasse une certaine valeur de luminosité est converti en blanc pur
A partir de là on peut appliquer le 2D_Flood sur l'extérieur (bouton 'Remplir'), donc
- Détourer avec transparence, soir par remplissage au clic, soit au pinceau ('Tracer', pour les rectifications éventuelles), avec une couleur arbitraire qui tranche (magenta clair), pour y voir plus clair.
- Convertir la couleur arbitraire en noir pur, la vraie couleur de transparence en Panoramic.

A partir de là, on peut sauvegarder le sprite si on veut, ce n'est pas indispensable, on fait 'OK' et on clique dans l'image principale pour le positionner.
Comme dit plus haut, on peut ensuite le déplacer à sa guise avec les boutons flèches, et modifier également sa luminosité, contraste et gamma, avant sauvegarde du résultat.

En cas de besoin, si on a oublié quelque chose, on peut revenir dans la 'Retouche du sprite', rectifier, 'OK', et recliquer pour le réinsérer.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude

avatar

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

MessageSujet: Re: Incrustation d'une image (dans une autre)   Jeu 12 Jan 2017 - 9:51

Bonjour à tous,

Je viens de tester ce petit programme.
Je l'ai enregistré car je pense qu'il peut servir pour se préparer des sprites.
Il faudra que j'approfondisse un peu... et que je regarde le code de plus près.

Beau travail JL35 cheers

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Incrustation d'une image (dans une autre)   Jeu 12 Jan 2017 - 16:54

Bonjour Jean Claude,

Pour le programme, je reconnais volontiers qu'au point de vue ergonomie on peut faire mieux, mais je l'ai fait en plusieurs fois, au fur et à mesure des besoins qui se présentaient... il faudrait tout reprendre et rationaliser tout ça...

Edit: modif aujourd'hui 12 à 22h pour essayer de clarifier un peu les opérations (notamment dans la mise au point du sprite).
Il faudrait tout reprendre et renuméroter les objets séquentiellement, mais... on verra plus tard !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Incrustation d'une image (dans une autre)   Ven 13 Jan 2017 - 23:27

J'ai ajouté la possibilité de zoomer le sprite après insertion (en plus ou en moins), avec l'instruction Sprite_Scale.

A noter:
- Les valeurs de zoom sont fractionnaires, par exemple 1.5 ou 0.8.
- Comme cette valeur s'applique au sprite affiché, à chaque changement de dimensions je recharge le sprite d'origine.
Sinon, si on réduit après avoir augmenté on perd beaucoup en définition d'image.

Si on fait une fausse manoeuvre, on peut toujours cliquer dans l'image de fond pour recharger le sprite d'origine.

Dommage qu'on n'ait pas l'instruction SNAPSHOT qui avait été annoncée en juin dernier, pour sauvegarder l'ensemble Scene2d + Sprites dans une image bmp... je le fais avec un artifice, mais il y a des limites.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



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

MessageSujet: Re: Incrustation d'une image (dans une autre)   Mar 17 Jan 2017 - 0:47

Mise à jour avec la toute nouvelle version d'aujourd'hui de Panoramic-Editor (27i10), avec notamment la nouvelle fonction SNAPSHOT: sauvegarde du Scene2d avec ses sprites, qui simplifie beaucoup, enlève les limitations de taille et rend bien plus rationnelle la sauvegarde du résultat.
On peut notamment dans la foulée insérer plusieurs images sur un même fond avant sauvegarde en validant à chaque fois l'incrustation.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Incrustation d'une image (dans une autre)   

Revenir en haut Aller en bas
 
Incrustation d'une image (dans une autre)
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Comment insérer une image dans les messages du forum ?
» comment inserer une image dans un sujet ??
» [Résolu] Croix rouge à la place d'une image
» Installer une carte dans un autre pc
» [Résolu] Ouvrir un lien dans une nouvelle page.

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: