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 |
|
|
| Incrustation d'une image (dans une autre) | |
| | Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Incrustation d'une image (dans une autre) Mar 10 Jan 2017 - 22: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 Lun 16 Jan 2017 - 22:43, édité 5 fois | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 11 Jan 2017 - 17: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. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Incrustation d'une image (dans une autre) Mer 11 Jan 2017 - 17: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 | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Incrustation d'une image (dans une autre) Mer 11 Jan 2017 - 18: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 ! 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 . | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Re Mer 11 Jan 2017 - 18:14 | |
| Ha ben voilà... ... pourquoi dès que l' on parle déménagement on fait le vide autour de soi ? 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... | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: +++ Mer 11 Jan 2017 - 18: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 ! 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) | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Incrustation d'une image (dans une autre) Mer 11 Jan 2017 - 20: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...) ! 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é ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Incrustation d'une image (dans une autre) Mer 11 Jan 2017 - 22: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. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Incrustation d'une image (dans une autre) Jeu 12 Jan 2017 - 7: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 A+ | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Incrustation d'une image (dans une autre) Jeu 12 Jan 2017 - 14: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 ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Incrustation d'une image (dans une autre) Ven 13 Jan 2017 - 21: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. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Incrustation d'une image (dans une autre) Lun 16 Jan 2017 - 22: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. | |
| | | Contenu sponsorisé
| Sujet: Re: Incrustation d'une image (dans une autre) | |
| |
| | | | Incrustation d'une image (dans une autre) | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |