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 |
|
|
| Editeur d'icônes | |
| | |
Auteur | Message |
---|
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Editeur d'icônes Ven 23 Juil 2010 - 16:43 | |
| prenons comme exemple l'icone de Cosmos, Autours du cercle exterieur la couleur du fond est blanche 255,255,255. Je veus insérer cette image (comme logo par exemple) dans un Picture et je veux que tous ce qui est autour du cercle extérieur se confonde avec le couleur de fond du Picture, pour que l'on ne voit que ce cercle et ce qu'il ya à l'intérieur. Ors si mon picture a une couleur de fond différente de celles proposées dans ton programme, ce ne sera pas possible. "Me suis-je bien fait compris" (citation de TAXI4) Maintenant si tu ne souhaite pas le faire, je bricolerais ton programme (avec ta permission) pour avoir ce choix. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Editeur d'icônes Ven 23 Juil 2010 - 17:50 | |
| Autrement dit, ce que tu voudrais, c'est une couleur 'transparente', comme dans les vraies icônes, c'est à dire une couleur qui laisse apparaître le fond de l'image. Mais ça je ne sais pas faire. Et comment comptes-tu incorporer ton image dans ton picture ? Si c'est avec File_Load, il ne gérera pas la transparence (à ma connaissance).
Par contre, si tu écris toi-même ton propre programme de lecture et dessin pixel par pixel de l'icône, il serait possible de définir une couleur de fond improbable (par exemple 255,255,254) qui serait considérée comme transparente et que tu ignorerais à la relecture du fichier. Tiens je vais regarder ce qu'on pourrait faire avec ça. Mais je le répète, ça suppose qu'on traite soi-même l'affichage du fichier dans le picture. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Editeur d'icônes Ven 23 Juil 2010 - 19:35 | |
| - Citation :
- Mais je le répète, ça suppose qu'on traite soi-même l'affichage du fichier dans le picture.
Oui, tout a fait, j'utilise FILE_LOAD pout charger l'image dans le Picture. Actuellement j'utilise photophiltre pour réctifier la couleur. Donc t'inquiète pas, çà ne gêne pas plus que çà. C'est juste pour pas utiliser plusieurs logiciel pour la même fonction et d'avoir pleins de fenêtres ouvertes sur l'écran. A+ | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Editeur d'icônes Ven 23 Juil 2010 - 22:26 | |
| Oui mais si tu utilises File8load, il ne gérera pas la transparence. Il faudrait que tu t'écrives un programme qui lise le fichier, et qui écrive les données sur l'écran, pixel par pixel... J'ai édité le programme page 1: - ajout d'un outil 'Rotation de 90% à gauche' qui pivote (à l'écran) l'image entière dans son état actuel. Ce qui permet par rotations successives 90%, 180°, 270°, 360°. Ça peut être amusant, et utile, par exemple si on dessine une flèche vers le haut, en la faisant tourner on obtient successivement toutes les directions (ça demande une ou deux secondes, ou plus en 64x64, patience). - suite à la remarque de Jean-Claude, j'introduis timidement la notion de couleur transparente (qui est 255,255,254). Au départ toute l'image est de cette couleur, représentée dans la zone dessin par ces cases barrées en croix. C'est une couleur comme une autre, qu'on peut choisir pour tracer. Mais je ne sais pas encore trop ce que je vais en faire, en tout cas ça ne marchera pas pour une icône Windows, (ce sera blanc), seulement pour une icône interne à un programme Panoramic, et à condition de lire le fichier soi-même, et non pas avec File_Load. C'est faisable, et ça sera fait, mais c'est une limitation. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur d'icônes Ven 23 Juil 2010 - 23:02 | |
| Je suis l'évolution rapide de ton éditeur d'icônes de près pour ne pas rater une version. Et ça vaut le coup ! Bravo pour la rotation et pour la couleur "Transparent".
Mais pourquoi elle te pose un problème ? C'est certain qu'une vraie transparence ne sera possible qu'avec un picture qu'on pourrait déclarer transparent. C'est une amélioration que j'avais suggéré il y a un moment déjà, au moment ou je convertissais mon IDE à une version avec icônes. Pour le moment, Jack n'a pas donné suite à cette suggestion.
Or, si j'ai bien compris Jean-Claude, il veut que les parties dites transparentes de l'icône se confondent avec la couleur de fond de son picture, et non avec une photo qu'il aurait chargé en image de fond. Or, il connait parfaitement les valeurs RGB de sa couleur de fond. Pourquoi ne pas donner la possibilité de saisir les valeurs RGB (en saisie directe ou avec un sélecteur de couleurs style palette) et utiliser ces valeurs au moment de la génération de l'icône ? Il faudrait aussi prévoir, à ce moment, un outil de "pickage" pour la couleur transparent en cliquant sur un pixel de l'image chargée à partir du disque pour redéfinir la couleur transparent.
J'espère que je me suis exprimé suffisamment clairement ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Editeur d'icônes Ven 23 Juil 2010 - 23:12 | |
| C'est clair, certes, mais ça nous entraîne vers l'usine à gaz. Et je préférerais la vraie transparence, c'est à dire une couleur donnée qui ne s'imprime pas et qui laisse le fond tel quel, quel qu'il soit (une image par exemple). Comme une vraie icône Windows. Mais dans l'état actuel de mes connaissances, ça ne peut pas se faire avec un outil Panoramic, il faut coder soi-même la lecture du fichier icône et colorier les pixels (ou non si c'est la couleur transparente). C'est très faisable, un petit sous-programme qui lit le bmp (je ne sais pas lire le .ico), peut-être un peu long à l'exécution, mais bon, ce ne sont que de petites images. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur d'icônes Ven 23 Juil 2010 - 23:20 | |
| Oui, tu peux obtenir une simulation de transparence de cette manière, avec un programme qui lit le fichier et redessine chaque pixel, en omettant ceux qui sont dits transparents. Mais encore une fois: cela ne marche que dans un picture et cela simule la transparence du dessin de l'icône par rapport au fond du picture. Tu ne peux en aucun cas coller une telle icône dans une form et obtenir une transparence de sorte qu'un voit la form à-travers l'icône, comme une image de fond de la form, par exemple. C'est impossible car un picture ne peut pas être transparent en Panoramic ! Tu verras toujours le carré ou rectangle blanc à l'intérieur tu peux dessiner ton icône dont la couleur "transparent" fera transparaître...le blanc du fond du picture, en jamais le motif de fond de la form !
EDIT
Après test de la nouvelle version, je constate que la couleur transparent dans la palette est bien affichée, mais on ne peut pas la cliquer, et on ne peut donc pas repeindre un pixel en transparent pour l'effacer ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Editeur d'icônes Ven 23 Juil 2010 - 23:51 | |
| Oui effectivement il y avait un petit bug d'affichage, mais la couleur transparente peut bien s'utiliser comme une autre couleur, c'est juste cette histoire de barrer en croix, je corrige tout de suite.
D'autre part je suis en train de préparer le sous-programme de lecture et d'affichage du fichier bmp, en tenant compte de la transparence que j'ai définie, mais ce sera du local Panoramic. | |
| | | Invité Invité
| Sujet: Re: Editeur d'icônes Sam 24 Juil 2010 - 0:07 | |
| Ne vous moquez pas de moi, voici un teste: photo fond d'image: photo icone: résultat: programme: - Code:
-
scene2d 1 file_load 1, "C:/TESTE/écran.bmp" sprite 2 sprite_file_load 2,"C:/TESTE/ICONEJL35/rouge.bmp" sprite_x_position 2,120 sprite_y_position 2,110 fait très rapidement pour voir le résultat A voir |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Editeur d'icônes Sam 24 Juil 2010 - 0:19 | |
| Mais tu as certainement raison, je ne connais pas les sprites et je n'y avais même pas pensé, mais c'est sans doute là qu'est la solution. Bravo cosmos, à étudier de plus près. Mais maintenant... ici c'est extinction des feux, alors | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur d'icônes Sam 24 Juil 2010 - 1:24 | |
| Je me suis permis d'adapter ton programme en y incluant le sélecteur de couleur de mon IDE, légèrement adapté. Cela se traduit par l'ajout de quelques définitions au début, des sous-programmes nécessaires à la fin, l'appel du sélecteur en cliquant sur la case de la couleur transparente, et l'adaptation des affichages dans la zone de dessin ainsi que l'utilisation de r(16), g(16) et b(16) au lieu de 155,255,254, et accessoirement la correction de l'affichage de la croix en couleur transparente. On peut ainsi choisir librement sa couleur transparente. - Code:
-
' Iconedit.bas éditeur d'icônes DIM w0, h0, wi, hi, we, he, hfe, xi, yi, ic, x%, y%, xc%, yc%, xca%, yca% DIM i%, j%, k%, c%, x1%, y1%, at2, an, pi, pr, pg, pb, xce, yce, wim, him, d%(8) DIM a$, co, ftmp$, fpr$, fred$, f$, xou, you, hou, out, cr, cg, cb, iv$ DIM l$, v%, vh$, lh%, obj%, et$ DIM r(16), g(16), b(16) DIM pix(64,64) LABEL Desima, Clic, Couleur, Outil, Ico2Des, Des2Ico, Lirbmp, Savbmp LABEL Undo, Format, Pic2Dat, Dat2Pic, DecHex, Cvx, Rdat, rs, Rota90, Aide DATA "Fill" DATA "2020": ' l, h DATA "000080000001C0000003600000063000000C180000180C000030060000600300" DATA "00C0018001FFFFC001FFFFE0019FFFF0018FFFF00187FFE00183FFC00181FF80" DATA "0180FF0001807E0001803C00018018000FF000003FFE00007FFF80007FFF8000" DATA "7FFF00000FF80000000000000000000000000000000000000000000000000000" DATA "Rot90" DATA "2020": ' l,h DATA "0000000000000000000000000000000000000000000003F000001FF000003FF0" DATA "0000FE000003F0000007C000000F8000003E0000003C0000007800000073C3C6" DATA "00F4242901E4242901C4242903C424290384242903842429673464267773A420" DATA "3FE024201FC024200F80242007002420020424200003C3C00000000000000000"
ftmp$ = "C:\Telechargements\Ftmp.bmp": ' ***************** à ajuster *********************** fred$ = "C:\Telechargements\Fred.bmp" : ' ***************** à ajuster ********************** fpr$ = "C:\Preced.bmp": ' **************** à ajuster *********************** iv$ = "C:\Progra~1\Irfanv~1\i_view32.exe ": ' ******* à ajuster ************
' --------- partie déclaration à inclure dans le programme label form_color_picker, corriger_couleur_RGB, color_picker label change_2802, change_2806, click_2810, click_2811 dim color_r%, color_g%, color_b%, color_s$, color_res%, color_test$, color_test% gosub form_color_picker
' couleurs (les 16 couleurs du basic + tranparence) r(0)=0: g(0)=0: b(0)=0: ' noir r(1)=0: g(1)=0: b(1)=128: ' bleu r(2)=0: g(2)=128: b(2)=0: ' vert r(3)=0: g(3)=128: b(3)=128: ' cyan r(4)=128: g(4)=0: b(4)=0: ' rouge r(5)=128: g(5)=0: b(5)=128: ' magenta r(6)=128: g(6)=64: b(6)=0: ' brun r(7)=192: g(7)=192: b(7)=192: ' blanc r(8)=128: g(8)=128: b(8)=128: ' gris r(9)=0: g(9)=0: b(9)=255: ' bleu clair r(10)=0: g(10)=255: b(10)=0: ' vert clair r(11)=0: g(11)=255: b(11)=255: ' cyan clair r(12)=255: g(12)=0: b(12)=0: ' rouge clair r(13)=255: g(13)=0: b(13)=255: ' magenta clair r(14)=255: g(14)=255: b(14)=0: ' jaune r(15)=255: g(15)=255: b(15)=255: ' blanc intense r(16)=255: g(16)=255: b(16)=254: ' couleur 'transparente'
w0 = 900: h0 = 800 WIDTH 0, w0: HEIGHT 0, h0: CAPTION 0, "ICONE/EDIT": ' Form 0
hfe = 640: ' fenêtre de dessin xi = 220: yi = 80: ' coordonnées de la fenêtre pi = 4*ATN(1) co = 0: ' couleur courante initiale (noir) out = 0: ' outil courant initial (point) at2 = 0 ic = 32: ' icône 32x32
' image principale PICTURE 1: ON_CLICK 1, Clic
' icône grandeur nature PICTURE 4: PICTURE 5 GOSUB Desima
' tableau des couleurs PICTURE 2: TOP 2, yi+hfe/2: LEFT 2, 20: WIDTH 2, 160: HEIGHT 2, hfe/2+40 ON_CLICK 2, Couleur 2D_TARGET_IS 2 FOR j% = 0 TO 7 FOR i% = 0 TO 1 c% = j% + 8*i%: 2D_FILL_COLOR r(c%), g(c%), b(c%) x% = i%*80: y% = j%*40 2D_RECTANGLE x%, y%, x%+80, y%+40 NEXT i% NEXT j% x% = 80: y% = 8*40: 2D_RECTANGLE x%, y%, x%+80, y%+40 2D_PEN_COLOR 128,128,128: 2D_LINE x%, y%, x%+80, y%+40: 2D_LINE x%, y%+40, x%+80, y% PRINT_TARGET_IS 2: PRINT_LOCATE x%+8, y%+13: PRINT "Transparente" ' couleur active PICTURE 3: TOP 3, yi+hfe/2-50: LEFT 3, 80: WIDTH 3, 50: HEIGHT 3, 40 2D_TARGET_IS 3: 2D_FILL_COLOR r(co), g(co), b(co) 2D_RECTANGLE 0, 0, 80, 40
' tableau des outils xou = 50: you = yi+50: hou = 40 PICTURE 10: LEFT 10, xou: TOP 10, you: WIDTH 10, hou: HEIGHT 10, hou 2D_TARGET_IS 10: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou 2D_FILL_COLOR 0,0,0: 2D_RECTANGLE hou/2-3,hou/2-3, hou/2+3, hou/2+3: ' point PICTURE 11: LEFT 11, xou+hou: TOP 11, you: WIDTH 11, hou: HEIGHT 11, hou 2D_TARGET_IS 11: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou 2D_PEN_WIDTH 3: 2D_LINE 10, hou-10, hou-10, 10: ' ligne PICTURE 12: LEFT 12, xou: TOP 12, you+hou: WIDTH 12, hou: HEIGHT 12, hou 2D_TARGET_IS 12: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou 2D_PEN_WIDTH 3: 2D_RECTANGLE 6, 10, hou-6, hou-10: ' rectangle vide PICTURE 13: LEFT 13, xou+hou: TOP 13, you+hou: WIDTH 13, hou: HEIGHT 13, hou 2D_TARGET_IS 13: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou 2D_FILL_COLOR 0,0,0: 2D_RECTANGLE 5, 9, hou-5, hou-9: ' rectangle plein PICTURE 14: LEFT 14, xou: TOP 14, you+2*hou: WIDTH 14, hou: HEIGHT 14, hou 2D_TARGET_IS 14: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou 2D_PEN_WIDTH 3: 2D_CIRCLE hou/2,hou/2,hou/2-6 : ' cercle vide PICTURE 15: LEFT 15, xou+hou: TOP 15, you+2*hou: WIDTH 15, hou: HEIGHT 15, hou 2D_TARGET_IS 15: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou 2D_FILL_COLOR 0,0,0: 2D_CIRCLE hou/2,hou/2,hou/2-5: ' cercle plein
PICTURE 16: LEFT 16, xou: TOP 16, you+3*hou: WIDTH 16, hou: HEIGHT 16, hou 2D_TARGET_IS 16: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou: ' fill x% = 2: y% = 6: obj% = 16: et$ = "Fill": GOSUB Dat2Pic
PICTURE 17: LEFT 17, xou+hou: TOP 17, you+3*hou: WIDTH 17, hou: HEIGHT 17, hou 2D_TARGET_IS 17: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou: ' libre PICTURE 18: LEFT 18, xou: TOP 18, you+4*hou: WIDTH 18, hou: HEIGHT 18, hou 2D_TARGET_IS 18: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou: ' Rotation x% = 0: y% = 2: obj% = 18: et$ = "Rot90": GOSUB Dat2Pic
PICTURE 19: LEFT 19, xou+hou: TOP 19, you+4*hou: WIDTH 19, hou: HEIGHT 19, hou 2D_TARGET_IS 19: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou: ' RAZ PRINT_TARGET_IS 19: FONT_SIZE 19,12: FONT_BOLD 19: PRINT: PRINT "RAZ" FOR i% = 10 TO 19: ON_CLICK i%, Outil: NEXT i% ' outil actif PICTURE 20: TOP 20, yi+hfe/2-50: LEFT 20, 140: WIDTH 20, hou: HEIGHT 20, hou 2D_TARGET_IS 20: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou 2D_FILL_COLOR 0,0,0: 2D_RECTANGLE hou/2-3,hou/2-3, hou/2+3, hou/2+3: ' point
' boutons BUTTON 30: TOP 30, 5: LEFT 30, 10: WIDTH 30, 120: HEIGHT 30, 25 CAPTION 30, "Lire BMP/ICO" ON_CLICK 30, Lirbmp BUTTON 31: TOP 31, 35: LEFT 31, 10: WIDTH 31, 120: HEIGHT 31, 25 CAPTION 31, "Sauve BMP/ICO" ON_CLICK 31, Savbmp BUTTON 32: TOP 32, 65: LEFT 32, 10: WIDTH 32, 120: HEIGHT 32, 25 CAPTION 32, "Sauve Datas (progr.)" ON_CLICK 32, Pic2Dat BUTTON 33: TOP 33, 95: LEFT 33, 10: WIDTH 33, 120: HEIGHT 33, 25 CAPTION 33, "Undo" ON_CLICK 33, Undo BUTTON 34: TOP 34, 5: LEFT 34, w0-80: WIDTH 34, 60: HEIGHT 34, 30 CAPTION 34, "Aide": ON_CLICK 34, Aide
' directives ALPHA 40: TOP 40, yi+ic*he+10: LEFT 40, xi+50 FONT_SIZE 40, 12: FONT_BOLD 40: CAPTION 40, "Outil Point: Clic le point" ALPHA 41: TOP 41, yi+hfe/2-50: LEFT 41, 20 FONT_SIZE 41, 12: FONT_BOLD 41: CAPTION 41, "Couleur"+chr$(10)+" active:" ALPHA 42: TOP 42, you+35: LEFT 42, 20: WIDTH 42, 20 FONT_SIZE 42, 12: ' FONT_BOLD 42 CAPTION 42,"O"+CHR$(10)+"U"+CHR$(10)+"T"+CHR$(10)+"I"+CHR$(10)+"L"+CHR$(10)+"S"
' options (format) CONTAINER_OPTION 50: TOP 50, 20: LEFT 50, xi: WIDTH 50, hfe-50: HEIGHT 50, 50 FONT_SIZE 50, 12: FONT_BOLD 50 CAPTION 50, " Format: " OPTION 51: PARENT 51, 50: TOP 51, 20: LEFT 51, 80: CAPTION 51, "16 x 16" OPTION 52: PARENT 52, 50: TOP 52, 20: LEFT 52, 210: CAPTION 52, "32 x 32" OPTION 53: PARENT 53, 50: TOP 53, 20: LEFT 53, 340: CAPTION 53, "48 x 48" OPTION 54: PARENT 54, 50: TOP 54, 20: LEFT 54, 470: CAPTION 54, "64 x 64" FOR i% = 51 TO 54: ON_CLICK i%, Format: NEXT i% MARK_ON 52
END ' ============================================================================ Desima: ' icône grandeur nature TOP 4, yi: LEFT 4, xi-ic-10: WIDTH 4, ic+4: HEIGHT 4, ic+4 COLOR 4, 0,255,0 TOP 5, yi+2: LEFT 5, xi-ic-8: WIDTH 5, ic: HEIGHT 5, ic 2D_TARGET_IS 5 ' couleur 255,255,254 considérée comme 'transparente' ' 2D_FILL_COLOR 255,255,254: 2D_PEN_COLOR 255,255,254: 2D_RECTANGLE 0, 0, ic, ic 2D_FILL_COLOR r(16),g(16),b(16): 2D_PEN_COLOR r(16),g(16),b(16): 2D_RECTANGLE 0, 0, ic, ic ' zone de dessin we = hfe/ic: he = we TOP 1, yi: LEFT 1, xi: WIDTH 1, ic*we: HEIGHT 1, ic*he 2D_TARGET_IS 1 ' 2D_FILL_COLOR 255,255,255: 2D_PEN_COLOR 255,255,255: 2D_RECTANGLE 1, 1, hfe, hfe 2D_FILL_COLOR r(16),g(16),b(16): 2D_PEN_COLOR r(16),g(16),b(16): 2D_RECTANGLE 1, 1, hfe, hfe 2D_PEN_COLOR 192,192,192 FOR y% = 0 TO hfe STEP we 2D_PEN_COLOR 192,192,192 IF y% = hfe/2 2D_PEN_COLOR 96,96,96 END_IF 2D_LINE 0, y%, 640, y% NEXT y% FOR x% = 0 TO hfe STEP we 2D_PEN_COLOR 192,192,192 IF x% = hfe/2 2D_PEN_COLOR 96,96,96 END_IF 2D_LINE x%, 0, x%, 640 NEXT x% GOSUB Ico2Des RETURN
Clic: FILE_SAVE 5, fpr$ x% = MOUSE_X_LEFT_DOWN(1): xca% = INT(x%/we) y% = MOUSE_Y_LEFT_DOWN(1): yca% = INT(y%/he) IF out = 4 AND at2 = 0 pr = COLOR_PIXEL_RED(5, xca%, yca%): ' couleur d'origine du centre du cercle pg = COLOR_PIXEL_GREEN (5, xca%, yca%): ' pour effacement ultérieur pb = COLOR_PIXEL_BLUE (5, xca%, yca%) xce = xca%: yce = yca% END_IF 2D_TARGET_IS 5: 2D_PEN_COLOR r(co),g(co),b(co) IF out < 6 THEN 2D_POINT xca%, yca% xc% = xca%*we: yc% = yca%*he ' 2D_TARGET_IS 1: 2D_FILL_COLOR r(co),g(co),b(co) 2D_TARGET_IS 1 if co=16 2D_FILL_COLOR 255,255,254 2D_RECTANGLE xc%, yc%, xc%+we+1, yc%+he+1 2d_line xc%,yc%+he+1,xc%+we+1,yc% 2d_line xc%,yc%,xc%+we+1,yc%+he+1 else 2D_FILL_COLOR r(co),g(co),b(co) 2D_RECTANGLE xc%, yc%, xc%+we+1, yc%+he+1 end_if IF at2 <> 0 2D_TARGET_IS 5 SELECT at2 CASE 1: 2D_LINE x1%, y1%, xca%, yca% CAPTION 40, "Outil Ligne: Clic le 1er point" CASE 2: 2D_LINE x1%, y1%, xca%, y1%: 2D_POLY_TO xca%,yca% 2D_POLY_TO x1%, yca%: 2D_POLY_TO x1%, y1% CAPTION 40, "Outil Rectangle vide: Clic le 1er coin" CASE 3: 2D_FILL_COLOR r(co),g(co),b(co): 2D_RECTANGLE x1%,y1%,xca%+1,yca%+1 CAPTION 40, "Outil Rectangle plein: Clic le 1er coin" CASE 4: j% = INT(SQR((xca%-x1%)*(xca%-x1%)+(yca%-y1%)*(yca%-y1%))): ' rayon IF j%<2 THEN RETURN FOR an = 0 to 2*pi STEP 1/j% x% = x1%+j%*COS(an): y% = y1%+j%*SIN(an) 2D_POINT x%, y% NEXT an 2D_PEN_COLOR pr, pg, pb: 2D_POINT xce, yce CAPTION 40, "Outil Cercle vide: Clic le centre" CASE 5: j% = INT(SQR((xca%-x1%)*(xca%-x1%)+(yca%-y1%)*(yca%-y1%))) IF j%<2 THEN RETURN 2D_FILL_COLOR r(co),g(co),b(co): 2D_CIRCLE x1%, y1%, j% CAPTION 40, "Outil Cercle plein: Clic le centre" END_SELECT GOSUB Ico2Des at2 = 0 ELSE x1% = xca%: y1% = yca% SELECT out CASE 1: CAPTION 40, "Outil Ligne: Clic le 2ème point" at2 = 1 CASE 2: CAPTION 40, "Outil Rectangle vide: Clic le coin opposé" at2 = 2 CASE 3: CAPTION 40, "Outil Rectangle plein: Clic le coin opposé" at2 = 3 CASE 4: CAPTION 40, "Outil Cercle vide: Clic un point du cercle" at2 = 4 CASE 5: CAPTION 40, "Outil Cercle plein: Clic un point du cercle" at2 = 5 CASE 6: 2D_TARGET_IS 5: 2D_FLOOD xca%, yca%, r(co), g(co), b(co) GOSUB Ico2Des END_SELECT END_IF RETURN
Couleur: x% = MOUSE_X_LEFT_DOWN(2): xc% = INT(x%/80) y% = MOUSE_Y_LEFT_DOWN(2): yc% = INT(y%/40) co = yc% + 8*xc% 2D_TARGET_IS 3: 2D_FILL_COLOR r(co),g(co),b(co) 2D_RECTANGLE 0, 0, 160, 40 IF co = 16 gosub color_picker END_IF RETURN
Outil: FOR i% = 10 TO 19 IF CLICKED(i%) = 1 THEN EXIT_FOR NEXT i% IF i% = 19 i% = MESSAGE_CONFIRMATION_YES_NO("Effacer entièrement le dessin") IF i% = 1 2D_TARGET_IS 5: 2D_PEN_COLOR 255,255,255: 2D_FILL_COLOR 255,255,255 2D_RECTANGLE 0, 0, ic, ic GOSUB Ico2Des END_IF RETURN END_IF IF i% = 18 GOSUB Rota90 GOSUB Ico2Des RETURN END_IF IF i% > 16 THEN RETURN out = i% - 10 2D_TARGET_IS 20: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou: ' raz outil actif SELECT out CASE 0: CAPTION 40, "Outil Point: Clic le point" 2D_FILL_COLOR 0,0,0: 2D_RECTANGLE hou/2-3,hou/2-3, hou/2+3, hou/2+3: ' point CASE 1: CAPTION 40, "Outil Ligne: Clic le 1er point" 2D_PEN_WIDTH 3: 2D_LINE 10, hou-10, hou-10, 10: ' ligne CASE 2: CAPTION 40, "Outil Rectangle vide: Clic le 1er coin" 2D_PEN_WIDTH 3: 2D_RECTANGLE 6, 10, hou-6, hou-10: ' rectangle vide CASE 3: CAPTION 40, "Outil Rectangle plein: Clic le 1er coin" 2D_FILL_COLOR 0,0,0: 2D_RECTANGLE 5, 9, hou-5, hou-9: ' rectangle plein CASE 4: CAPTION 40, "Outil Cercle vide: Clic le centre" 2D_PEN_WIDTH 3: 2D_CIRCLE hou/2,hou/2,hou/2-6 : ' cercle vide CASE 5: CAPTION 40, "Outil Cercle plein: Clic le centre" 2D_FILL_COLOR 0,0,0: 2D_CIRCLE hou/2,hou/2,hou/2-5: ' cercle plein CASE 6: CAPTION 40, "Outil Flood: clic un point de la surface à remplir" x% = 2: y% = 6: obj% = 20: et$ = "Fill": GOSUB Dat2Pic END_SELECT RETURN
Ico2Des: ' recopie de l'icône grandeur nature dans l'espace de dessin 2D_TARGET_IS 1 FOR j% = 0 TO ic-1 FOR i% = 0 TO ic-1 cr = COLOR_PIXEL_RED(5, i%, j%) cg = COLOR_PIXEL_GREEN (5, i%, j%) cb = COLOR_PIXEL_BLUE (5, i%, j%) ' 2D_FILL_COLOR cr, cg, cb xc% = i%*we: yc% = j%*he ' 2D_RECTANGLE xc%, yc%, xc%+we+1, yc%+he+1 ' IF cr=255 AND cg=255 AND cb=254 IF cr=r(16) AND cg=g(16) AND cb=b(16) ' couleur 'transparente' 2D_PEN_COLOR 200,200,200 2D_FILL_COLOR 255,255,254 2D_RECTANGLE xc%, yc%, xc%+we+1, yc%+he+1 2D_LINE xc%,yc%,xc%+we,yc%+he: 2D_LINE xc%, yc%+he, xc%+we, yc% else 2D_FILL_COLOR cr, cg, cb 2D_RECTANGLE xc%, yc%, xc%+we+1, yc%+he+1 END_IF NEXT i% NEXT j% RETURN
Des2Ico: ' recopie de l'espace de dessin dans l'icône grandeur nature 2D_TARGET_IS 5 FOR j% = 0 TO ic-1 FOR i% = 0 TO ic-1 xc% = i%*we+we/2: yc% = j%*he+he/2 cr = COLOR_PIXEL_RED(1, xc%, yc%) cg = COLOR_PIXEL_GREEN (1, xc%, yc%) cb = COLOR_PIXEL_BLUE (1, xc%, yc%) 2D_PEN_COLOR cr,cg,cb: 2D_POINT i%, y% NEXT i% NEXT j% RETURN
Lirbmp: ' Charger une image bmp ou une icône dans la zone dessin OPEN_DIALOG 61 FILTER 61, "Fichiers BMP/ICO|*.bmp;*.ico" f$ = FILE_NAME$(61): DELETE 61: IF f$ = "_" THEN RETURN a$ = UPPER$(RIGHT$(f$, 4)) IF a$ = ".ICO" EXECUTE_WAIT iv$ + f$ + " /convert=" + ftmp$: f$ = ftmp$ ELSE IF a$ <> ".BMP" THEN RETURN END_IF ' dimensions wi x hi du fichier bmp f$ FILEBIN_OPEN_READ 1, f$ FILEBIN_POSITION 1, 18 FOR i% = 1 TO 8: FILEBIN_READ 1, d%(i%): NEXT i% wim = d%(1) + 256*d%(2) + 256*256*d%(3) + 256*256*256*d%(4) him = d%(5) + 256*d%(6) + 256*256*d%(7) + 256*256*256*d%(8) FILEBIN_CLOSE 1 ' IF wim=16 OR wim=32 OR wim=48 OR wim=64 ' IF wim <> ic ' ic = wim ' SELECT ic ' CASE 16: MARK_ON 51 ' CASE 32: MARK_ON 52 ' CASE 48: MARK_ON 53 ' CASE 64: MARK_ON 54 ' END_SELECT ' GOSUB Desima: ' changement de résolution en fonction de l'image ' END_IF ' END_IF IF wim<>ic ' redimensionner l'image (le stretch_on ne convient pas, il ne redimensionne ' l'image que visuellement, pas en mémoire) a$ = " /resize=(" + STR$(ic) + "," + STR$(ic) + ")" EXECUTE_WAIT iv$ + f$ + a$ + " /convert=" + fred$ FILE_LOAD 5, fred$ ELSE FILE_LOAD 5, f$ END_IF GOSUB Ico2Des RETURN
Savbmp: ' sauvegarde de l'icône actuelle en fichier BMP ou ICO SAVE_DIALOG 61: FILTER 61, "Fichier BMP/ICO|*.bmp;*.ico" f$ = FILE_NAME$(61): DELETE 61: IF f$ = "_" THEN RETURN a$ = UPPER$(RIGHT$(f$, 4)) IF a$ = ".ICO" FILE_SAVE 5, ftmp$ EXECUTE_WAIT iv$ + ftmp$ + " /convert=" + f$: ' conversion bmp -> ico ELSE FILE_SAVE 5, f$ END_IF RETURN
Undo: FILE_LOAD 5, fpr$ GOSUB Ico2Des at2 = 0 RETURN
Format: FOR i% = 51 TO 54 IF CLICKED(i%) = 1 THEN EXIT_FOR NEXT i% SELECT i% CASE 51: ic = 16 CASE 52: ic = 32 CASE 53: ic = 48 CASE 54: ic = 64 END_SELECT GOSUB Desima RETURN
Dimfic: ' dimensions wi x hi du fichier bmp f$ FILEBIN_OPEN_READ 1, f$ FILEBIN_POSITION 1, 18 FOR i% = 1 TO 8: FILEBIN_READ 1, d%(i%): NEXT i% wi = d%(1) + 256*d%(2) + 256*256*d%(3) + 256*256*256*d%(4) hi = d%(5) + 256*d%(6) + 256*256*d%(7) + 256*256*256*d%(8) FILEBIN_CLOSE 1 RETURN
Pic2Dat: ' Copie dans le clipboard de l'image (N/B) sous forme de lignes de datas l$ = "": lh% = 2 FOR y% = 0 TO ic-1 FOR x% = 0 TO ic-1 STEP 8 v% = 0 FOR i% = 0 to 7 cr = COLOR_PIXEL_RED(5,x%+i%,y%) cg = COLOR_PIXEL_GREEN(5,x%+i%,y%) cb = COLOR_PIXEL_BLUE(5,x%+i%,y%) IF (cr+cg+cb) < 750 : ' non blanc ou transparent v% = v% + POWER(2, 7-i%) END_IF NEXT i% GOSUB DecHex l$ = l$ + vh$ NEXT x% NEXT y% ' sauvegarde de l$ dans le fichier Z:\Icone.txt FILE_OPEN_WRITE 1, "Z:\Icone.txt" FILE_WRITELN 1, l$ FILE_CLOSE 1 ' sauvegarde de l$ sous forme de lignes de datas dans le clipboard v% = ic: GOSUB DecHex a$ = "DATA "+CHR$(34)+vh$+vh$+CHR$(34)+": ' l,h"+CHR$(13)+CHR$(10) rs: IF LEN(l$) > 64 a$ = a$ + "DATA " + CHR$(34) + LEFT$(l$, 64) + CHR$(34) + CHR$(13) + CHR$(10) l$ = MID$(l$, 65, LEN(l$) - 64): GOTO rs END_IF a$ = a$ + "DATA " + CHR$(34) + l$ + CHR$(34) CLIPBOARD_STRING_COPY a$ a$ = "Le dessin a été sauvegardé dans le clipboard" + CHR$(10) a$ = a$ + "sous forme de lignes de datas en hexadécimal" MESSAGE a$ RETURN
Dat2Pic: ' Positionnement de lecture des datas après le label et$ RESTORE: REPEAT: READ a$: UNTIL a$ = et$ ' dessin des datas en x%, y% dans l'objet système obj% READ l$: vh$ = LEFT$(l$, 2): GOSUB Cvx: wim = v% vh$ = RIGHT$(l$, 2): GOSUB Cvx: him = v% a$ = "" WHILE LEN(a$) < wim*him/4: READ l$: a$ = a$ + l$: END_WHILE 2D_TARGET_IS obj%: 2D_PEN_COLOR 0,0,0 FOR j% = 0 TO him - 1 l$ = MID$(a$, 1+j%*wim/4, wim/4) FOR i% = 1 TO LEN(l$) v% = INSTR("0123456789ABCDEF", MID$(l$, i%, 1))-1 FOR k% = 0 TO 4 IF BIN_AND(v%, POWER(2, 3-k%)) > 0 2D_POINT x%+i%*4+k%, y%+j% END_IF NEXT k% NEXT i% NEXT j% GOTO Rdat Cvx: ' conversion hexadécimal/décimal de vh$, résultat dans v% v% = 0 FOR k% = 1 TO LEN(vh$) v% = v%*16 + INSTR("0123456789ABCDEF", MID$(vh$, k%, 1))-1 NEXT k% RETURN Rdat: RETURN ' dessin des datas en x%, y% dans l'objet système obj% RESTORE READ l$: vh$ = LEFT$(l$, 2): GOSUB Cvx: wim = v% vh$ = RIGHT$(l$, 2): GOSUB Cvx: him = v% a$ = "" WHILE LEN(a$) < wim*him/4: READ l$: a$ = a$ + l$: END_WHILE 2D_TARGET_IS obj%: 2D_PEN_COLOR 0,0,0 FOR j% = 0 TO him - 1 l$ = MID$(a$, 1+j%*wim/4, wim/4) FOR i% = 1 TO LEN(l$) v% = INSTR("0123456789ABCDEF", MID$(l$, i%, 1))-1 FOR k% = 0 TO 4 IF BIN_AND(v%, POWER(2, 3-k%)) > 0 2D_POINT x%+i%*4+k%, y%+j% END_IF NEXT k% NEXT i% NEXT j% GOTO Rdat Cvx: ' conversion hexadécimal/décimal de vh$, résultat dans v% v% = 0 FOR k% = 1 TO LEN(vh$) v% = v%*16 + INSTR("0123456789ABCDEF", MID$(vh$, k%, 1))-1 NEXT k% RETURN Rdat: RETURN
DecHex: ' conversion décimal/hexa de v%, résultat vh$ (complété si utile à lh% caractères) vh$="": IF lh% < 1 THEN lh% = 1 REPEAT vh$ = MID$("0123456789ABCDEF", 16*(v%/16-INT(v%/16))+1, 1) + vh$: v% = INT(v%/16) UNTIL v% <= 0 IF LEN(vh$) < lh% THEN vh$ = STRING$(lh% - LEN(vh$), "0") + vh$ RETURN
Rota90: FILE_SAVE 5, fpr$ ' rotation de l'icône de 90° à gauche FOR y% = 0 TO ic-1 i% = y% FOR x% = 0 TO ic-1 j% = ic-1-x% pr = COLOR_PIXEL_RED(5, x%, y%) pg = COLOR_PIXEL_GREEN(5, x%, y%) pb = COLOR_PIXEL_BLUE(5, x%, y%) pix(j%,i%) = 65536*pr + 256*pg + pb NEXT x% NEXT y% 2D_TARGET_IS 5 FOR y% = 0 TO ic-1 FOR x% = 0 TO ic-1 pr = INT(pix(y%,x%)/65536) pg = BIN_AND(INT(pix(y%,x%)/256), 255) pb = BIN_AND(pix(y%,x%), 255) 2D_PEN_COLOR pr, pg, pb: 2D_POINT x%, y% NEXT x% NEXT y% RETURN
Aide: a$ = " EDITEUR D'ICONES" + chr$(10)+chr$(10) a$ = a$ + "Pour création et/ou modification d'icônes simples." + chr$(10) a$ = a$ + "- Le programme ne peut manipuler que 16 couleurs." + chr$(10) a$ = a$ + "- Le programme ne gère pas la transparence." + chr$(10)+chr$(10) a$ = a$ + "Deux zones d'images: la zone de dessin agrandie à droite, l'icône grandeur nature"+chr$(10) a$ = a$ + "en haut à gauche." + chr$(10) a$ = a$ + "Chaque case à droite représente un pixel de l'icône." + chr$(10) + chr$(10) a$ = a$ + "1) Création d'une icône pour usage général (Windows)" + chr$(10) a$ = a$ + "- Choisir l'option format: 16x16, 32x32, 48x48 ou 64x64" + chr$(10) a$ = a$ + "- Dessiner l'icône à l'aide des outils fournis en cliquant sur l'outil désiré:"+chr$(10) a$ = a$ + " Point, Ligne, Rectangle vide ou plein, Cercle vide ou plein, Remplissage,"+chr$(10) a$ = a$ + " Rotation 90° à gauche, Effacement complet du dessin."+chr$(10) a$ = a$ + " Il y a possibilité d'un seul retour en arrière (touche 'Undo') en cas d'erreur."+chr$(10) a$ = a$ + " Cliquer sur la couleur de tracé désirée (16 couleurs disponibles)."+chr$(10) a$ = a$ + " La couleur active et l'outil actif sont affichés au-dessus du tableau des couleurs."+chr$(10) a$ = a$ + " Pour effacer un point ou une figure: dessiner avec la couleur de fond (blanc)."+chr$(10) a$ = a$ + "- Sauvegarder l'icône dans un fichier (BMP ou ICO, au choix): clic 'Sauve BMP/ICO'."+chr$(10)+chr$(10) a$ = a$ + "2) Création d'une icône pour usage sous Panoramic, pour agrémenter un programme."+chr$(10) a$ = a$ + " (fonction à l'usage des programmeurs)."+chr$(10) a$ = a$ + "- Le dessin créé en noir et blanc sera sauvegardé dans le Clipboard sous forme de lignes"+chr$(10) a$ = a$ + " de DATAs en hexadécimal pour utilisation ultérieure dans un programme Panoramic."+chr$(10) a$ = a$ + " Il suffit de 'Coller' ces lignes de datas dans le nouveau programme et d'appeler le"+chr$(10) a$ = a$ + " sous programme Dat2Pic avec en paramètres le numéro d'objet destinataire (Picture"+chr$(10) a$ = a$ + " par exemple), et les coordonnées x et y de l'emplacement dans l'objet."+chr$(10) a$ = a$ + " On se contentera du noir et blanc (1 bit par pixel), sinon les datas seraient trop"+chr$(10) a$ = a$ + " volumineux."+chr$(10) a$ = a$ + " L'icône 'remplissage' de ce programme a été créée ainsi (voir les datas en tête)."+chr$(10)+chr$(10) a$ = a$ + "Les directives affichée sous la zone de dessin sont fonction de l'outil choisi."+chr$(10)+chr$(10) a$ = a$ + "3) Lecture d'une icône (.ICO, ou petite image carrée au format .BMP)"+chr$(10) a$ = a$ + "- Touche 'Lire BMP/ICO', ouverture d'une boîte de dialogue pour choisir le fichier."+chr$(10) a$ = a$ + " On peut modifier l'icône chargée et la sauvegarder modifiée, au format voulu."+chr$(10)+chr$(10) a$ = a$ + "Les conversions Format bmp <-> format ico (Panoramic ne gère pas le format ico) sont"+chr$(10) a$ = a$ + "sous-traitées au programme IrfanView, qui doit donc être présent sur le pc. MESSAGE a$ RETURN
' --------- création form sélecteur de couleur - sous-programmes à inclure en fin de programme form_color_picker: form 2800 : hide 2800 : command_target_is 2800 : border_hide 2800 : color 2800,220,220,220 top 2800,320 : left 2800,320 : width 2800,500 : height 2800,300 picture 2801 : top 2801,20 : left 2801,20 : width 2801,100 : height 2801,100 scroll_bar 2802 : top 2802,150 : left 2802,20 : width 2802,400 : horizontal 2802 min 2802,0 : max 2802,255 : on_change 2802,change_2802 scroll_bar 2803 : top 2803,170 : left 2803,20 : width 2803,400 : horizontal 2803 min 2803,0 : max 2803,255 : on_change 2803,change_2802 scroll_bar 2804 : top 2804,190 : left 2804,20 : width 2804,400 : horizontal 2804 min 2804,0 : max 2804,255 : on_change 2804,change_2802 picture 2805 : top 2805,23 : left 2805,23 : width 2805,94 : height 2805,96 : color 2805,0,0,0 edit 2806 : top 2806,150 : left 2806,440 : width 2806,30 : text 2806,"0" : on_change 2806,change_2806 edit 2807 : top 2807,170 : left 2807,440 : width 2807,30 : text 2807,"0" : on_change 2807,change_2806 edit 2808 : top 2808,190 : left 2808,440 : width 2808,30 : text 2808,"0" : on_change 2808,change_2806 button 2810 : top 2810,220 : left 2810,20 : caption 2810,"Abandon" : on_click 2810,click_2810 button 2811 : top 2811,220 : left 2811,110 : caption 2811,"Valider" : on_click 2811,click_2811 alpha 2812 : top 2812,20 : left 2812,150 : font_size 2812,12 : font_bold 2812 : caption 2812,"Couleur <transparent>" color_r% = 0 : color_g% = 0 : color_b% = 0 command_target_is 0 : return
' afficher le color picker color_picker: text 2806,str$(r(16)) : text 2807,str$(g(16)) : text 2808,str$(b(16)) show 2800 return
' changer couleur R, G ou B change_2802: color 2805,position(2802),position(2803),position(2804) text 2806,position(2802) : text 2807,position(2803) : text 2808,position(2804) return
' changer couleur R G ou B par saisie directe change_2806: color_test$ = text$(2806) : gosub corriger_couleur_RGB : text 2806,color_test% : color_r% = color_test% color_test$ = text$(2807) : gosub corriger_couleur_RGB : text 2807,color_test% : color_g% = color_test% color_test$ = text$(2808) : gosub corriger_couleur_RGB : text 2808,color_test% : color_b% = color_test% color 2805,color_r%,color_g%,color_b% position 2802,color_r% : position 2803,color_g% : position 2804,color_b% return
' abandon changer couleur click_2810: color_s$ = "" message "Abandon" : ' ligne à supprimer hide 2800 return
' valider changer couleur ' la couleur est retournée en color_s$ ' et dans les variables color_r%, color_g%, color_g% click_2811: color_s$ = str$(color_pixel_red(2805,1,1))+","+str$(color_pixel_green(2805,1,1))+","+str$(color_pixel_blue(2805,1,1)) message color_s$ : ' ligne à supprimer r(16)=position(2802) : g(16)=position(2803) : b(16)=position(2804) : ' couleur 'transparente' hide 2800 return
' corriger une valeur RGB contenue dans color_test% corriger_couleur_RGB: if numeric(color_test$)=1 color_test% = val(color_test$) else color_test% = 0 end_if if color_test%>255 then color_test% = 255 if color_test%<0 then coolor_test% = 0 return
| |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Editeur d'icônes Sam 24 Juil 2010 - 9:34 | |
| Merci Klaus, c'est exactement ce que je souhaitait, je peux ainsi rendre transparent n'importe quelle partie de l'icone en lui donnant la même couleur que celle du "Form_Picture" ou elle se trouvera.
Du coup PhotoFiltre a du plomd dans l'aile, mais il possède encore une option (qui fait que je le garde) il peut réduire ou augmenter la taille de l'icone. J'ai trouvé sur le net un tas d'icones en 32x32 24x24 etc et dans mon programme je les transforment toutes en 24x24.
Merci à tous | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Editeur d'icônes Sam 24 Juil 2010 - 9:37 | |
| Très bien Klaus, je valide entièrement tes modifs, et je remplace dans mes sources mon programme par le tien. Disons que ça devient une oeuvre (!) collective, je trouve que c'est très bien comme ça.
Concernant la transparence, dommage que je ne me sois pas intéressé aux fonctions SPRITE plus tôt (cosmos, tu m'embêtes, avec tes 3 lignes de code tu as bouleversé mes certitudes), je regarde de plus près mais j'ai l'impression que ça règle le problème de la transparence, qui y est prévu, d'autant plus qu'on peut définir une image standard bmp comme sprite. Et d'une manière extrêmement simple. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Editeur d'icônes Sam 24 Juil 2010 - 9:38 | |
| Salut Jean-Claude, on s'est croisés | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Editeur d'icônes Sam 24 Juil 2010 - 9:45 | |
| Bonjour JL35 - Citation :
- et je remplace dans mes sources mon programme par le tien.
Ne soit pas si modeste, çà reste ton programme et ton idée de dépard. Là, encore une fois, on voit qu'a plusieurs on peut sortir des trucs supers. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Editeur d'icônes Sam 24 Juil 2010 - 10:28 | |
| Disons que je remplace mes lignes de code par celles de Klaus ! Provisoirement, parce que je continue à étudier 'du côté de chez Sprite' | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur d'icônes Sam 24 Juil 2010 - 10:49 | |
| Je suis heureux que ma suggestion te convienne, et je te remercie de ta reconnaissance.
Un mot pour la transparence, pour clarifier la situation:
L'idée de Cosmos70 d'utiliser les sprite est géniale pour coller une image par-dessus une autre en voyant l'image de fond à travers. Le sprite est conçu comme ça, et pour ça. mais cela ne résoud malheureusement pas le problème de transparence de l'icône sauf dans le cas précis où on veut placer cette icône par-dessus un objet scene_2d Panoramic, car dans ce cas particulier, on peut créer un sprite pour recevoir l'icône, et on verra le fond de la scene_2d à travers.
Mais on ne peut pas faire cela au-dessus d'un picture, cas pour lequel il faut utiliser la méthode de JL35 de dessin pixel par pixel pour inclure l'icône SANS les parties dites transparentes, et on ne peut olus distinguer l'icône du fond pour par exemple la remplacer, la bouger ou la cliquer...
Et on en peut rien faire du tout pour placer l'icône n'importe où sur une form, comme on placerait un bouton, simplement sur le fond de la form. La raison en est simple: une form ne peut pas être sprite_target, et un picture ne peut pas être transparent. Quoi qu'on fasse, avec une icône dans un picture, on aura toujours la couleur de fond de l'icône qui s'affichera (Par défaut, c'est blanc, et pour des icônes chargées du net et converties en BMP, c'est noir).
C'est ce qui m'a causé problème pour faire des boutons image dans mon IDE réalisé en Panoramic. Je vois que Jack est capable de réaliser à la vitesse de l'éclair de nouveaux objets pour ceux qui s'intéressent aux jeux. C'est super. Oh que j'aimerais voir apparaître un image_button avec les mêmes possibilités que button acec en plus la possibilité de faire un file_load d'un fichier BMP¨pour lui affdecter une image... (c'est un petit appel du pied, n'est-ce pas, Jack ?).
Pour moi, la solution vient de la petite modif que j'ai apportée à l'éditeur d'icônes de jl35: la définition personnalisée de la couleur "transparent'". Car ainsi, on peut la fixer sur la couleur du fond sur lequel on veut placer le picture contenant l'icône. Conséquence: l"icône apparaît comme transparent, on peut la déplacer (dans les limites de ce fond), on peut la cliquer même sur les parties transparentes, on peut la remplacer par une autre et faisant file_load etc.
Tout ceci est le résultat d'un mois de tentatives multiples pour obtenir une transparence pour mes boutons de l'IDE. A l'époque, je n'avais pas encore le bel éditeur d'icônes de jl35. J'ai donc dû prendre des icônes existantes, puis utiliser la fonction remplissage de photofiltre pour remplacer la couleur de fond de mes icônes par la couleur qui m'intéressait. Ca marche, mais c'est lourd. Le programme de jl35 fait cela de façon beaucoup plus simple. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur d'icônes Sam 24 Juil 2010 - 10:54 | |
| @JL35:
Puis-je te suggérer d'utiliser la case libre dans la palette des outils pour y placer une pipette ? on cliquerait alors avec un premier click sur un pixel quelconque de la surface de dessin, cette couleur serait alors mémorisée dans les cellules des tables r(), g() et b() en fonction d'un second click sur une des cases de couleur, donc indice de 0 à 15 pour les couleurs et 16 pour la case transparent ? Tu aurais alors la personnalisation immédiate de l'ensemble de tes couleurs, y compris de la couleur transparent. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Editeur d'icônes Sam 24 Juil 2010 - 12:03 | |
| - Citation :
- J'ai donc dû prendre des icônes existantes, puis utiliser la fonction remplissage de photofiltre pour remplacer la couleur de fond de mes icônes par la couleur qui m'intéressait. Ca marche, mais c'est lourd. Le programme de jl35 fait cela de façon beaucoup plus simple.
C'etait exactement ma façon de procéder avant le programme de JL35 (modifié Klauss). L' éditeur d'icone de JL35 présente des plus, il est plus simple, on agit pixel par pixel si on le souhaite et sutout on voit le résultat en live. Que pensez-vous d'y ajouter la possibilite d'agrandir ou réduire l'icone ? ( par Ex: de 32x32 à 24x24 etc...) | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur d'icônes Sam 24 Juil 2010 - 12:37 | |
| @Jean-Claude: Selon mes essais, cela marche déjà maintenant !
Il suffit de choisir la résolution désirée, disons 48x48, puis charger une icône d'une autre résolution, disons 32x32, et elle s'affiche agrandie. On la sauvegarde alors et elle prend la nouvelle taille.
C'est pas beau, ça ? | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Editeur d'icônes Sam 24 Juil 2010 - 14:49 | |
| Tout à fait Klaus, ça avait d'ailleurs déjà été précisé (c'est IrfanView qui fait le boulot). L'icône lue s'ajuste automatiquement à la taille prédéfinie, j'avais même mis un exemple. Jean Claude, faut suivre ! Quant à l'idée de la pipette, elle est bonne ! à mettre dans ma 'todo list' (je m'y mets moi aussi) | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur d'icônes Sam 24 Juil 2010 - 15:16 | |
| @JL35: J'ai fait un premier essai avec une pipette ! Je n'ai pas encore fait l'icone pour l'outil - je préfère que tu le fasses pour que le style soit cohérent. Mais la case vide dans la liste des outils conduit maintenant vers une "Pipette Transparent" qui permet de repiquer la couleur Transparent sur n'importe quel pixel, et l'image est adapté automatiquement. De plus, j'ai réduit légèrement la place pour les couleurs dans la palette, de sorte à créer de l'espace pour une petite icône 3 couleurs à côté de chaque couleur. En cliquant à cet endroit, cela appelle le color picker pour la couleur en question. Si l'on valide une nouvelle couleur, elle vient remplacer l'ancienne - dans la palette et comme couleur active. Voici le source: - Code:
-
' Iconedit.bas éditeur d'icônes DIM w0, h0, wi, hi, we, he, hfe, xi, yi, ic, x%, y%, xc%, yc%, xca%, yca% DIM i%, j%, k%, c%, x1%, y1%, at2, an, pi, pr, pg, pb, xce, yce, wim, him, d%(8) DIM a$, co, ftmp$, fpr$, fred$, f$, xou, you, hou, out, cr, cg, cb, iv$ DIM l$, v%, vh$, lh%, obj%, et$ DIM r(16), g(16), b(16) DIM pix(64,64) LABEL Desima, Clic, Couleur, Outil, Ico2Des, Des2Ico, Lirbmp, Savbmp LABEL Undo, Format, Pic2Dat, Dat2Pic, DecHex, Cvx, Rdat, rs, Rota90, Aide DATA "Fill" DATA "2020": ' l, h DATA "000080000001C0000003600000063000000C180000180C000030060000600300" DATA "00C0018001FFFFC001FFFFE0019FFFF0018FFFF00187FFE00183FFC00181FF80" DATA "0180FF0001807E0001803C00018018000FF000003FFE00007FFF80007FFF8000" DATA "7FFF00000FF80000000000000000000000000000000000000000000000000000" DATA "Rot90" DATA "2020": ' l,h DATA "0000000000000000000000000000000000000000000003F000001FF000003FF0" DATA "0000FE000003F0000007C000000F8000003E0000003C0000007800000073C3C6" DATA "00F4242901E4242901C4242903C424290384242903842429673464267773A420" DATA "3FE024201FC024200F80242007002420020424200003C3C00000000000000000"
ftmp$ = "C:\Telechargements\Ftmp.bmp": ' ***************** à ajuster *********************** fred$ = "C:\Telechargements\Fred.bmp" : ' ***************** à ajuster ********************** fpr$ = "C:\Preced.bmp": ' **************** à ajuster *********************** iv$ = "C:\Progra~1\Irfanv~1\i_view32.exe ": ' ******* à ajuster ************
' --------- partie déclaration à inclure dans le programme label form_color_picker, corriger_couleur_RGB, color_picker label change_2802, change_2806, click_2810, click_2811 dim color_r%, color_g%, color_b%, color_s$, color_res%, color_test$, color_test% gosub form_color_picker
' couleurs (les 16 couleurs du basic + tranparence) r(0)=0: g(0)=0: b(0)=0: ' noir r(1)=0: g(1)=0: b(1)=128: ' bleu r(2)=0: g(2)=128: b(2)=0: ' vert r(3)=0: g(3)=128: b(3)=128: ' cyan r(4)=128: g(4)=0: b(4)=0: ' rouge r(5)=128: g(5)=0: b(5)=128: ' magenta r(6)=128: g(6)=64: b(6)=0: ' brun r(7)=192: g(7)=192: b(7)=192: ' blanc r(8)=128: g(8)=128: b(8)=128: ' gris r(9)=0: g(9)=0: b(9)=255: ' bleu clair r(10)=0: g(10)=255: b(10)=0: ' vert clair r(11)=0: g(11)=255: b(11)=255: ' cyan clair r(12)=255: g(12)=0: b(12)=0: ' rouge clair r(13)=255: g(13)=0: b(13)=255: ' magenta clair r(14)=255: g(14)=255: b(14)=0: ' jaune r(15)=255: g(15)=255: b(15)=255: ' blanc intense r(16)=255: g(16)=255: b(16)=254: ' couleur 'transparente'
w0 = 900: h0 = 800 WIDTH 0, w0: HEIGHT 0, h0: CAPTION 0, "ICONE/EDIT": ' Form 0
hfe = 640: ' fenêtre de dessin xi = 220: yi = 80: ' coordonnées de la fenêtre pi = 4*ATN(1) co = 0: ' couleur courante initiale (noir) out = 0: ' outil courant initial (point) at2 = 0 ic = 32: ' icône 32x32
' image principale PICTURE 1: ON_CLICK 1, Clic
' icône grandeur nature PICTURE 4: PICTURE 5 GOSUB Desima
' tableau des couleurs PICTURE 2: TOP 2, yi+hfe/2: LEFT 2, 20: WIDTH 2, 160: HEIGHT 2, hfe/2+40 ON_CLICK 2, Couleur 2D_TARGET_IS 2 FOR j% = 0 TO 7 FOR i% = 0 TO 1 c% = j% + 8*i%: 2D_FILL_COLOR r(c%), g(c%), b(c%) x% = i%*80: y% = j%*40 2D_RECTANGLE x%, y%, x%+60, y%+40 2d_fill_color 220,220,220 2d_rectangle x%+60,y%,x%+80,y%+40 2d_fill_color 255,0,0 2d_rectangle x%+60+7,y%+7,x%+60+13,y%+13 2d_fill_color 0,255,0 2d_rectangle x%+60+7,y%+7+12,x%+60+13,y%+13+12 2d_fill_color 0,0,255 2d_rectangle x%+60+7,y%+7+24,x%+60+13,y%+13+24 NEXT i% NEXT j% 2d_fill_color 255,255,255 x% = 80: y% = 8*40: 2D_RECTANGLE x%, y%, x%+60, y%+40 PRINT_TARGET_IS 2: PRINT_LOCATE x%+1, y%+13: PRINT "Transparent" 2d_fill_color 220,220,220 2d_rectangle x%+60,y%,x%+80,y%+40 2d_fill_color 255,0,0 2d_rectangle x%+60+7,y%+7,x%+60+13,y%+13 2d_fill_color 0,255,0 2d_rectangle x%+60+7,y%+7+12,x%+60+13,y%+13+12 2d_fill_color 0,0,255 2d_rectangle x%+60+7,y%+7+24,x%+60+13,y%+13+24 2D_PEN_COLOR 128,128,128: 2D_LINE x%, y%, x%+60, y%+40: 2D_LINE x%, y%+40, x%+60, y% ' couleur active PICTURE 3: TOP 3, yi+hfe/2-50: LEFT 3, 80: WIDTH 3, 50: HEIGHT 3, 40 2D_TARGET_IS 3: 2D_FILL_COLOR r(co), g(co), b(co) 2D_RECTANGLE 0, 0, 80, 40
' tableau des outils xou = 50: you = yi+50: hou = 40 PICTURE 10: LEFT 10, xou: TOP 10, you: WIDTH 10, hou: HEIGHT 10, hou 2D_TARGET_IS 10: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou 2D_FILL_COLOR 0,0,0: 2D_RECTANGLE hou/2-3,hou/2-3, hou/2+3, hou/2+3: ' point PICTURE 11: LEFT 11, xou+hou: TOP 11, you: WIDTH 11, hou: HEIGHT 11, hou 2D_TARGET_IS 11: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou 2D_PEN_WIDTH 3: 2D_LINE 10, hou-10, hou-10, 10: ' ligne PICTURE 12: LEFT 12, xou: TOP 12, you+hou: WIDTH 12, hou: HEIGHT 12, hou 2D_TARGET_IS 12: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou 2D_PEN_WIDTH 3: 2D_RECTANGLE 6, 10, hou-6, hou-10: ' rectangle vide PICTURE 13: LEFT 13, xou+hou: TOP 13, you+hou: WIDTH 13, hou: HEIGHT 13, hou 2D_TARGET_IS 13: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou 2D_FILL_COLOR 0,0,0: 2D_RECTANGLE 5, 9, hou-5, hou-9: ' rectangle plein PICTURE 14: LEFT 14, xou: TOP 14, you+2*hou: WIDTH 14, hou: HEIGHT 14, hou 2D_TARGET_IS 14: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou 2D_PEN_WIDTH 3: 2D_CIRCLE hou/2,hou/2,hou/2-6 : ' cercle vide PICTURE 15: LEFT 15, xou+hou: TOP 15, you+2*hou: WIDTH 15, hou: HEIGHT 15, hou 2D_TARGET_IS 15: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou 2D_FILL_COLOR 0,0,0: 2D_CIRCLE hou/2,hou/2,hou/2-5: ' cercle plein
PICTURE 16: LEFT 16, xou: TOP 16, you+3*hou: WIDTH 16, hou: HEIGHT 16, hou 2D_TARGET_IS 16: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou: ' fill x% = 2: y% = 6: obj% = 16: et$ = "Fill": GOSUB Dat2Pic
PICTURE 17: LEFT 17, xou+hou: TOP 17, you+3*hou: WIDTH 17, hou: HEIGHT 17, hou 2D_TARGET_IS 17: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou: ' libre PICTURE 18: LEFT 18, xou: TOP 18, you+4*hou: WIDTH 18, hou: HEIGHT 18, hou 2D_TARGET_IS 18: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou: ' Rotation x% = 0: y% = 2: obj% = 18: et$ = "Rot90": GOSUB Dat2Pic
PICTURE 19: LEFT 19, xou+hou: TOP 19, you+4*hou: WIDTH 19, hou: HEIGHT 19, hou 2D_TARGET_IS 19: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou: ' RAZ PRINT_TARGET_IS 19: FONT_SIZE 19,12: FONT_BOLD 19: PRINT: PRINT "RAZ" FOR i% = 10 TO 19: ON_CLICK i%, Outil: NEXT i% ' outil actif PICTURE 20: TOP 20, yi+hfe/2-50: LEFT 20, 140: WIDTH 20, hou: HEIGHT 20, hou 2D_TARGET_IS 20: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou 2D_FILL_COLOR 0,0,0: 2D_RECTANGLE hou/2-3,hou/2-3, hou/2+3, hou/2+3: ' point
' boutons BUTTON 30: TOP 30, 5: LEFT 30, 10: WIDTH 30, 120: HEIGHT 30, 25 CAPTION 30, "Lire BMP/ICO" ON_CLICK 30, Lirbmp BUTTON 31: TOP 31, 35: LEFT 31, 10: WIDTH 31, 120: HEIGHT 31, 25 CAPTION 31, "Sauve BMP/ICO" ON_CLICK 31, Savbmp BUTTON 32: TOP 32, 65: LEFT 32, 10: WIDTH 32, 120: HEIGHT 32, 25 CAPTION 32, "Sauve Datas (progr.)" ON_CLICK 32, Pic2Dat BUTTON 33: TOP 33, 95: LEFT 33, 10: WIDTH 33, 120: HEIGHT 33, 25 CAPTION 33, "Undo" ON_CLICK 33, Undo BUTTON 34: TOP 34, 5: LEFT 34, w0-80: WIDTH 34, 60: HEIGHT 34, 30 CAPTION 34, "Aide": ON_CLICK 34, Aide
' directives ALPHA 40: TOP 40, yi+ic*he+10: LEFT 40, xi+50 FONT_SIZE 40, 12: FONT_BOLD 40: CAPTION 40, "Outil Point: Clic le point" ALPHA 41: TOP 41, yi+hfe/2-50: LEFT 41, 20 FONT_SIZE 41, 12: FONT_BOLD 41: CAPTION 41, "Couleur"+chr$(10)+" active:" ALPHA 42: TOP 42, you+35: LEFT 42, 20: WIDTH 42, 20 FONT_SIZE 42, 12: ' FONT_BOLD 42 CAPTION 42,"O"+CHR$(10)+"U"+CHR$(10)+"T"+CHR$(10)+"I"+CHR$(10)+"L"+CHR$(10)+"S"
' options (format) CONTAINER_OPTION 50: TOP 50, 20: LEFT 50, xi: WIDTH 50, hfe-50: HEIGHT 50, 50 FONT_SIZE 50, 12: FONT_BOLD 50 CAPTION 50, " Format: " OPTION 51: PARENT 51, 50: TOP 51, 20: LEFT 51, 80: CAPTION 51, "16 x 16" OPTION 52: PARENT 52, 50: TOP 52, 20: LEFT 52, 210: CAPTION 52, "32 x 32" OPTION 53: PARENT 53, 50: TOP 53, 20: LEFT 53, 340: CAPTION 53, "48 x 48" OPTION 54: PARENT 54, 50: TOP 54, 20: LEFT 54, 470: CAPTION 54, "64 x 64" FOR i% = 51 TO 54: ON_CLICK i%, Format: NEXT i% MARK_ON 52
END ' ============================================================================ Desima: ' icône grandeur nature TOP 4, yi: LEFT 4, xi-ic-10: WIDTH 4, ic+4: HEIGHT 4, ic+4 COLOR 4, 0,255,0 TOP 5, yi+2: LEFT 5, xi-ic-8: WIDTH 5, ic: HEIGHT 5, ic 2D_TARGET_IS 5 ' couleur 255,255,254 considérée comme 'transparente' ' 2D_FILL_COLOR 255,255,254: 2D_PEN_COLOR 255,255,254: 2D_RECTANGLE 0, 0, ic, ic 2D_FILL_COLOR r(16),g(16),b(16): 2D_PEN_COLOR r(16),g(16),b(16): 2D_RECTANGLE 0, 0, ic, ic ' zone de dessin we = hfe/ic: he = we TOP 1, yi: LEFT 1, xi: WIDTH 1, ic*we: HEIGHT 1, ic*he 2D_TARGET_IS 1 ' 2D_FILL_COLOR 255,255,255: 2D_PEN_COLOR 255,255,255: 2D_RECTANGLE 1, 1, hfe, hfe 2D_FILL_COLOR r(16),g(16),b(16): 2D_PEN_COLOR r(16),g(16),b(16): 2D_RECTANGLE 1, 1, hfe, hfe 2D_PEN_COLOR 192,192,192 FOR y% = 0 TO hfe STEP we 2D_PEN_COLOR 192,192,192 IF y% = hfe/2 2D_PEN_COLOR 96,96,96 END_IF 2D_LINE 0, y%, 640, y% NEXT y% FOR x% = 0 TO hfe STEP we 2D_PEN_COLOR 192,192,192 IF x% = hfe/2 2D_PEN_COLOR 96,96,96 END_IF 2D_LINE x%, 0, x%, 640 NEXT x% GOSUB Ico2Des RETURN
Clic: FILE_SAVE 5, fpr$ x% = MOUSE_X_LEFT_DOWN(1): xca% = INT(x%/we) y% = MOUSE_Y_LEFT_DOWN(1): yca% = INT(y%/he) IF out = 4 AND at2 = 0 pr = COLOR_PIXEL_RED(5, xca%, yca%): ' couleur d'origine du centre du cercle pg = COLOR_PIXEL_GREEN (5, xca%, yca%): ' pour effacement ultérieur pb = COLOR_PIXEL_BLUE (5, xca%, yca%) xce = xca%: yce = yca% END_IF 2D_TARGET_IS 5: 2D_PEN_COLOR r(co),g(co),b(co) IF out < 6 THEN 2D_POINT xca%, yca% xc% = xca%*we: yc% = yca%*he ' 2D_TARGET_IS 1: 2D_FILL_COLOR r(co),g(co),b(co) 2D_TARGET_IS 1 if out<>7 if co=16 2D_FILL_COLOR 255,255,254 2D_RECTANGLE xc%, yc%, xc%+we+1, yc%+he+1 2d_line xc%,yc%+he+1,xc%+we+1,yc% 2d_line xc%,yc%,xc%+we+1,yc%+he+1 else 2D_FILL_COLOR r(co),g(co),b(co) 2D_RECTANGLE xc%, yc%, xc%+we+1, yc%+he+1 end_if end_if IF at2 <> 0 2D_TARGET_IS 5 SELECT at2 CASE 1: 2D_LINE x1%, y1%, xca%, yca% CAPTION 40, "Outil Ligne: Clic le 1er point" CASE 2: 2D_LINE x1%, y1%, xca%, y1%: 2D_POLY_TO xca%,yca% 2D_POLY_TO x1%, yca%: 2D_POLY_TO x1%, y1% CAPTION 40, "Outil Rectangle vide: Clic le 1er coin" CASE 3: 2D_FILL_COLOR r(co),g(co),b(co): 2D_RECTANGLE x1%,y1%,xca%+1,yca%+1 CAPTION 40, "Outil Rectangle plein: Clic le 1er coin" CASE 4: j% = INT(SQR((xca%-x1%)*(xca%-x1%)+(yca%-y1%)*(yca%-y1%))): ' rayon IF j%<2 THEN RETURN FOR an = 0 to 2*pi STEP 1/j% x% = x1%+j%*COS(an): y% = y1%+j%*SIN(an) 2D_POINT x%, y% NEXT an 2D_PEN_COLOR pr, pg, pb: 2D_POINT xce, yce CAPTION 40, "Outil Cercle vide: Clic le centre" CASE 5: j% = INT(SQR((xca%-x1%)*(xca%-x1%)+(yca%-y1%)*(yca%-y1%))) IF j%<2 THEN RETURN 2D_FILL_COLOR r(co),g(co),b(co): 2D_CIRCLE x1%, y1%, j% CAPTION 40, "Outil Cercle plein: Clic le centre" END_SELECT GOSUB Ico2Des at2 = 0 ELSE x1% = xca%: y1% = yca% SELECT out CASE 1: CAPTION 40, "Outil Ligne: Clic le 2ème point" at2 = 1 CASE 2: CAPTION 40, "Outil Rectangle vide: Clic le coin opposé" at2 = 2 CASE 3: CAPTION 40, "Outil Rectangle plein: Clic le coin opposé" at2 = 3 CASE 4: CAPTION 40, "Outil Cercle vide: Clic un point du cercle" at2 = 4 CASE 5: CAPTION 40, "Outil Cercle plein: Clic un point du cercle" at2 = 5 CASE 6: 2D_TARGET_IS 5: 2D_FLOOD xca%, yca%, r(co), g(co), b(co) GOSUB Ico2Des case 7: color_r% = color_pixel_red(5,x1%,y1%) color_g% = color_pixel_green(5,x1%,y1%) color_b% = color_pixel_blue(5,x1%,y1%) at2 = 7 caption 40,"attendre svp..." display 2d_target_is 5 FOR j% = 0 TO ic-1 FOR i% = 0 TO ic-1 cr = COLOR_PIXEL_RED(5, i%, j%) cg = COLOR_PIXEL_GREEN (5, i%, j%) cb = COLOR_PIXEL_BLUE (5, i%, j%) if cr=r(16) and cg=g(16) and cb=b(16) 2d_pen_color color_r%,color_g%,color_b% 2d_point i%,j% end_if NEXT i% NEXT j% r(16) = color_r% g(16) = color_g% b(16) = color_b% gosub ico2des at2 = 0 out = 0 caption 40,"Outil Point: clic le point" END_SELECT END_IF RETURN
Couleur: x% = MOUSE_X_LEFT_DOWN(2): xc% = INT(x%/80) y% = MOUSE_Y_LEFT_DOWN(2): yc% = INT(y%/40) co = yc% + 8*xc% if (x%>60 and x%<80) or (x%>140 and x%<160) gosub color_picker end_if 2D_TARGET_IS 3: 2D_FILL_COLOR r(co),g(co),b(co) 2D_RECTANGLE 0, 0, 160, 40 ' IF co = 16 ' gosub color_picker ' END_IF RETURN
Outil: FOR i% = 10 TO 19 IF CLICKED(i%) = 1 THEN EXIT_FOR NEXT i% IF i% = 19 i% = MESSAGE_CONFIRMATION_YES_NO("Effacer entièrement le dessin") IF i% = 1 2D_TARGET_IS 5: 2D_PEN_COLOR 255,255,255: 2D_FILL_COLOR 255,255,255 2D_RECTANGLE 0, 0, ic, ic GOSUB Ico2Des END_IF RETURN END_IF IF i% = 18 GOSUB Rota90 GOSUB Ico2Des RETURN END_IF ' IF i% > 16 THEN RETURN out = i% - 10 2D_TARGET_IS 20: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou: ' raz outil actif SELECT out CASE 0: CAPTION 40, "Outil Point: Clic le point" 2D_FILL_COLOR 0,0,0: 2D_RECTANGLE hou/2-3,hou/2-3, hou/2+3, hou/2+3: ' point CASE 1: CAPTION 40, "Outil Ligne: Clic le 1er point" 2D_PEN_WIDTH 3: 2D_LINE 10, hou-10, hou-10, 10: ' ligne CASE 2: CAPTION 40, "Outil Rectangle vide: Clic le 1er coin" 2D_PEN_WIDTH 3: 2D_RECTANGLE 6, 10, hou-6, hou-10: ' rectangle vide CASE 3: CAPTION 40, "Outil Rectangle plein: Clic le 1er coin" 2D_FILL_COLOR 0,0,0: 2D_RECTANGLE 5, 9, hou-5, hou-9: ' rectangle plein CASE 4: CAPTION 40, "Outil Cercle vide: Clic le centre" 2D_PEN_WIDTH 3: 2D_CIRCLE hou/2,hou/2,hou/2-6 : ' cercle vide CASE 5: CAPTION 40, "Outil Cercle plein: Clic le centre" 2D_FILL_COLOR 0,0,0: 2D_CIRCLE hou/2,hou/2,hou/2-5: ' cercle plein CASE 6: CAPTION 40, "Outil Flood: clic un point de la surface à remplir" x% = 2: y% = 6: obj% = 20: et$ = "Fill": GOSUB Dat2Pic case 7: caption 40,"Outil Pipette transparent: click sur un point pour choisir la couleur" END_SELECT RETURN
Ico2Des: ' recopie de l'icône grandeur nature dans l'espace de dessin 2D_TARGET_IS 1 FOR j% = 0 TO ic-1 FOR i% = 0 TO ic-1 cr = COLOR_PIXEL_RED(5, i%, j%) cg = COLOR_PIXEL_GREEN (5, i%, j%) cb = COLOR_PIXEL_BLUE (5, i%, j%) ' 2D_FILL_COLOR cr, cg, cb xc% = i%*we: yc% = j%*he ' 2D_RECTANGLE xc%, yc%, xc%+we+1, yc%+he+1 ' IF cr=255 AND cg=255 AND cb=254 IF cr=r(16) AND cg=g(16) AND cb=b(16) ' couleur 'transparente' 2D_PEN_COLOR 200,200,200 2D_FILL_COLOR 255,255,254 2D_RECTANGLE xc%, yc%, xc%+we+1, yc%+he+1 2D_LINE xc%,yc%,xc%+we,yc%+he: 2D_LINE xc%, yc%+he, xc%+we, yc% else 2D_FILL_COLOR cr, cg, cb 2D_RECTANGLE xc%, yc%, xc%+we+1, yc%+he+1 END_IF NEXT i% NEXT j% RETURN
Des2Ico: ' recopie de l'espace de dessin dans l'icône grandeur nature 2D_TARGET_IS 5 FOR j% = 0 TO ic-1 FOR i% = 0 TO ic-1 xc% = i%*we+we/2: yc% = j%*he+he/2 cr = COLOR_PIXEL_RED(1, xc%, yc%) cg = COLOR_PIXEL_GREEN (1, xc%, yc%) cb = COLOR_PIXEL_BLUE (1, xc%, yc%) 2D_PEN_COLOR cr,cg,cb: 2D_POINT i%, y% NEXT i% NEXT j% RETURN
Lirbmp: ' Charger une image bmp ou une icône dans la zone dessin OPEN_DIALOG 61 FILTER 61, "Fichiers BMP/ICO|*.bmp;*.ico" f$ = FILE_NAME$(61): DELETE 61: IF f$ = "_" THEN RETURN a$ = UPPER$(RIGHT$(f$, 4)) IF a$ = ".ICO" EXECUTE_WAIT iv$ + f$ + " /convert=" + ftmp$: f$ = ftmp$ ELSE IF a$ <> ".BMP" THEN RETURN END_IF ' dimensions wi x hi du fichier bmp f$ FILEBIN_OPEN_READ 1, f$ FILEBIN_POSITION 1, 18 FOR i% = 1 TO 8: FILEBIN_READ 1, d%(i%): NEXT i% wim = d%(1) + 256*d%(2) + 256*256*d%(3) + 256*256*256*d%(4) him = d%(5) + 256*d%(6) + 256*256*d%(7) + 256*256*256*d%(8) FILEBIN_CLOSE 1 ' IF wim=16 OR wim=32 OR wim=48 OR wim=64 ' IF wim <> ic ' ic = wim ' SELECT ic ' CASE 16: MARK_ON 51 ' CASE 32: MARK_ON 52 ' CASE 48: MARK_ON 53 ' CASE 64: MARK_ON 54 ' END_SELECT ' GOSUB Desima: ' changement de résolution en fonction de l'image ' END_IF ' END_IF IF wim<>ic ' redimensionner l'image (le stretch_on ne convient pas, il ne redimensionne ' l'image que visuellement, pas en mémoire) a$ = " /resize=(" + STR$(ic) + "," + STR$(ic) + ")" EXECUTE_WAIT iv$ + f$ + a$ + " /convert=" + fred$ FILE_LOAD 5, fred$ ELSE FILE_LOAD 5, f$ END_IF GOSUB Ico2Des RETURN
Savbmp: ' sauvegarde de l'icône actuelle en fichier BMP ou ICO SAVE_DIALOG 61: FILTER 61, "Fichier BMP/ICO|*.bmp;*.ico" f$ = FILE_NAME$(61): DELETE 61: IF f$ = "_" THEN RETURN a$ = UPPER$(RIGHT$(f$, 4)) IF a$ = ".ICO" FILE_SAVE 5, ftmp$ EXECUTE_WAIT iv$ + ftmp$ + " /convert=" + f$: ' conversion bmp -> ico ELSE FILE_SAVE 5, f$ END_IF RETURN
Undo: FILE_LOAD 5, fpr$ GOSUB Ico2Des at2 = 0 RETURN
Format: FOR i% = 51 TO 54 IF CLICKED(i%) = 1 THEN EXIT_FOR NEXT i% SELECT i% CASE 51: ic = 16 CASE 52: ic = 32 CASE 53: ic = 48 CASE 54: ic = 64 END_SELECT GOSUB Desima RETURN
Dimfic: ' dimensions wi x hi du fichier bmp f$ FILEBIN_OPEN_READ 1, f$ FILEBIN_POSITION 1, 18 FOR i% = 1 TO 8: FILEBIN_READ 1, d%(i%): NEXT i% wi = d%(1) + 256*d%(2) + 256*256*d%(3) + 256*256*256*d%(4) hi = d%(5) + 256*d%(6) + 256*256*d%(7) + 256*256*256*d%(8) FILEBIN_CLOSE 1 RETURN
Pic2Dat: ' Copie dans le clipboard de l'image (N/B) sous forme de lignes de datas l$ = "": lh% = 2 FOR y% = 0 TO ic-1 FOR x% = 0 TO ic-1 STEP 8 v% = 0 FOR i% = 0 to 7 cr = COLOR_PIXEL_RED(5,x%+i%,y%) cg = COLOR_PIXEL_GREEN(5,x%+i%,y%) cb = COLOR_PIXEL_BLUE(5,x%+i%,y%) IF (cr+cg+cb) < 750 : ' non blanc ou transparent v% = v% + POWER(2, 7-i%) END_IF NEXT i% GOSUB DecHex l$ = l$ + vh$ NEXT x% NEXT y% ' sauvegarde de l$ dans le fichier Z:\Icone.txt FILE_OPEN_WRITE 1, "Z:\Icone.txt" FILE_WRITELN 1, l$ FILE_CLOSE 1 ' sauvegarde de l$ sous forme de lignes de datas dans le clipboard v% = ic: GOSUB DecHex a$ = "DATA "+CHR$(34)+vh$+vh$+CHR$(34)+": ' l,h"+CHR$(13)+CHR$(10) rs: IF LEN(l$) > 64 a$ = a$ + "DATA " + CHR$(34) + LEFT$(l$, 64) + CHR$(34) + CHR$(13) + CHR$(10) l$ = MID$(l$, 65, LEN(l$) - 64): GOTO rs END_IF a$ = a$ + "DATA " + CHR$(34) + l$ + CHR$(34) CLIPBOARD_STRING_COPY a$ a$ = "Le dessin a été sauvegardé dans le clipboard" + CHR$(10) a$ = a$ + "sous forme de lignes de datas en hexadécimal" MESSAGE a$ RETURN
Dat2Pic: ' Positionnement de lecture des datas après le label et$ RESTORE: REPEAT: READ a$: UNTIL a$ = et$ ' dessin des datas en x%, y% dans l'objet système obj% READ l$: vh$ = LEFT$(l$, 2): GOSUB Cvx: wim = v% vh$ = RIGHT$(l$, 2): GOSUB Cvx: him = v% a$ = "" WHILE LEN(a$) < wim*him/4: READ l$: a$ = a$ + l$: END_WHILE 2D_TARGET_IS obj%: 2D_PEN_COLOR 0,0,0 FOR j% = 0 TO him - 1 l$ = MID$(a$, 1+j%*wim/4, wim/4) FOR i% = 1 TO LEN(l$) v% = INSTR("0123456789ABCDEF", MID$(l$, i%, 1))-1 FOR k% = 0 TO 4 IF BIN_AND(v%, POWER(2, 3-k%)) > 0 2D_POINT x%+i%*4+k%, y%+j% END_IF NEXT k% NEXT i% NEXT j% GOTO Rdat Cvx: ' conversion hexadécimal/décimal de vh$, résultat dans v% v% = 0 FOR k% = 1 TO LEN(vh$) v% = v%*16 + INSTR("0123456789ABCDEF", MID$(vh$, k%, 1))-1 NEXT k% RETURN Rdat: RETURN ' dessin des datas en x%, y% dans l'objet système obj% RESTORE READ l$: vh$ = LEFT$(l$, 2): GOSUB Cvx: wim = v% vh$ = RIGHT$(l$, 2): GOSUB Cvx: him = v% a$ = "" WHILE LEN(a$) < wim*him/4: READ l$: a$ = a$ + l$: END_WHILE 2D_TARGET_IS obj%: 2D_PEN_COLOR 0,0,0 FOR j% = 0 TO him - 1 l$ = MID$(a$, 1+j%*wim/4, wim/4) FOR i% = 1 TO LEN(l$) v% = INSTR("0123456789ABCDEF", MID$(l$, i%, 1))-1 FOR k% = 0 TO 4 IF BIN_AND(v%, POWER(2, 3-k%)) > 0 2D_POINT x%+i%*4+k%, y%+j% END_IF NEXT k% NEXT i% NEXT j% GOTO Rdat Cvx: ' conversion hexadécimal/décimal de vh$, résultat dans v% v% = 0 FOR k% = 1 TO LEN(vh$) v% = v%*16 + INSTR("0123456789ABCDEF", MID$(vh$, k%, 1))-1 NEXT k% RETURN Rdat: RETURN
DecHex: ' conversion décimal/hexa de v%, résultat vh$ (complété si utile à lh% caractères) vh$="": IF lh% < 1 THEN lh% = 1 REPEAT vh$ = MID$("0123456789ABCDEF", 16*(v%/16-INT(v%/16))+1, 1) + vh$: v% = INT(v%/16) UNTIL v% <= 0 IF LEN(vh$) < lh% THEN vh$ = STRING$(lh% - LEN(vh$), "0") + vh$ RETURN
Rota90: FILE_SAVE 5, fpr$ ' rotation de l'icône de 90° à gauche FOR y% = 0 TO ic-1 i% = y% FOR x% = 0 TO ic-1 j% = ic-1-x% pr = COLOR_PIXEL_RED(5, x%, y%) pg = COLOR_PIXEL_GREEN(5, x%, y%) pb = COLOR_PIXEL_BLUE(5, x%, y%) pix(j%,i%) = 65536*pr + 256*pg + pb NEXT x% NEXT y% 2D_TARGET_IS 5 FOR y% = 0 TO ic-1 FOR x% = 0 TO ic-1 pr = INT(pix(y%,x%)/65536) pg = BIN_AND(INT(pix(y%,x%)/256), 255) pb = BIN_AND(pix(y%,x%), 255) 2D_PEN_COLOR pr, pg, pb: 2D_POINT x%, y% NEXT x% NEXT y% RETURN
Aide: a$ = " EDITEUR D'ICONES" + chr$(10)+chr$(10) a$ = a$ + "Pour création et/ou modification d'icônes simples." + chr$(10) a$ = a$ + "- Le programme ne peut manipuler que 16 couleurs et la couleur Tranparent." + chr$(10)+chr$(10) a$ = a$ + "Deux zones d'images: la zone de dessin agrandie à droite, l'icône grandeur nature"+chr$(10) a$ = a$ + "en haut à gauche." + chr$(10) a$ = a$ + "Chaque case à droite représente un pixel de l'icône." + chr$(10) + chr$(10) a$ = a$ + "1) Création d'une icône pour usage général (Windows)" + chr$(10) a$ = a$ + "- Choisir l'option format: 16x16, 32x32, 48x48 ou 64x64" + chr$(10) a$ = a$ + "- Dessiner l'icône à l'aide des outils fournis en cliquant sur l'outil désiré:"+chr$(10) a$ = a$ + " Point, Ligne, Rectangle vide ou plein, Cercle vide ou plein, Remplissage,"+chr$(10) a$ = a$ + " Rotation 90° à gauche, Effacement complet du dessin."+chr$(10) a$ = a$ + " Il y a possibilité d'un seul retour en arrière (touche 'Undo') en cas d'erreur."+chr$(10) a$ = a$ + " Cliquer sur la couleur de tracé désirée (16 couleurs disponibles)."+chr$(10) a$ = a$ + " La couleur active et l'outil actif sont affichés au-dessus du tableau des couleurs."+chr$(10) a$ = a$ + " Pour effacer un point ou une figure: dessiner avec la couleur de fond (blanc)."+chr$(10) a$ = a$ + "- Sauvegarder l'icône dans un fichier (BMP ou ICO, au choix): clic 'Sauve BMP/ICO'."+chr$(10)+chr$(10) a$ = a$ + "2) Création d'une icône pour usage sous Panoramic, pour agrémenter un programme."+chr$(10) a$ = a$ + " (fonction à l'usage des programmeurs)."+chr$(10) a$ = a$ + "- Le dessin créé en noir et blanc sera sauvegardé dans le Clipboard sous forme de lignes"+chr$(10) a$ = a$ + " de DATAs en hexadécimal pour utilisation ultérieure dans un programme Panoramic."+chr$(10) a$ = a$ + " Il suffit de 'Coller' ces lignes de datas dans le nouveau programme et d'appeler le"+chr$(10) a$ = a$ + " sous programme Dat2Pic avec en paramètres le numéro d'objet destinataire (Picture"+chr$(10) a$ = a$ + " par exemple), et les coordonnées x et y de l'emplacement dans l'objet."+chr$(10) a$ = a$ + " On se contentera du noir et blanc (1 bit par pixel), sinon les datas seraient trop"+chr$(10) a$ = a$ + " volumineux."+chr$(10) a$ = a$ + " L'icône 'remplissage' de ce programme a été créée ainsi (voir les datas en tête)."+chr$(10)+chr$(10) a$ = a$ + "Les directives affichée sous la zone de dessin sont fonction de l'outil choisi."+chr$(10)+chr$(10) a$ = a$ + "3) Lecture d'une icône (.ICO, ou petite image carrée au format .BMP)"+chr$(10) a$ = a$ + "- Touche 'Lire BMP/ICO', ouverture d'une boîte de dialogue pour choisir le fichier."+chr$(10) a$ = a$ + " On peut modifier l'icône chargée et la sauvegarder modifiée, au format voulu."+chr$(10)+chr$(10) a$ = a$ + "Les conversions Format bmp <-> format ico (Panoramic ne gère pas le format ico) sont"+chr$(10) a$ = a$ + "sous-traitées au programme IrfanView, qui doit donc être présent sur le pc. MESSAGE a$ RETURN
' --------- création form sélecteur de couleur - sous-programmes à inclure en fin de programme form_color_picker: form 2800 : hide 2800 : command_target_is 2800 : border_hide 2800 : color 2800,220,220,220 top 2800,320 : left 2800,320 : width 2800,500 : height 2800,300 picture 2801 : top 2801,20 : left 2801,20 : width 2801,100 : height 2801,100 scroll_bar 2802 : top 2802,150 : left 2802,20 : width 2802,400 : horizontal 2802 min 2802,0 : max 2802,255 : on_change 2802,change_2802 scroll_bar 2803 : top 2803,170 : left 2803,20 : width 2803,400 : horizontal 2803 min 2803,0 : max 2803,255 : on_change 2803,change_2802 scroll_bar 2804 : top 2804,190 : left 2804,20 : width 2804,400 : horizontal 2804 min 2804,0 : max 2804,255 : on_change 2804,change_2802 picture 2805 : top 2805,23 : left 2805,23 : width 2805,94 : height 2805,96 : color 2805,0,0,0 edit 2806 : top 2806,150 : left 2806,440 : width 2806,30 : text 2806,"0" : on_change 2806,change_2806 edit 2807 : top 2807,170 : left 2807,440 : width 2807,30 : text 2807,"0" : on_change 2807,change_2806 edit 2808 : top 2808,190 : left 2808,440 : width 2808,30 : text 2808,"0" : on_change 2808,change_2806 button 2810 : top 2810,220 : left 2810,20 : caption 2810,"Abandon" : on_click 2810,click_2810 button 2811 : top 2811,220 : left 2811,110 : caption 2811,"Valider" : on_click 2811,click_2811 alpha 2812 : top 2812,20 : left 2812,150 : font_size 2812,12 : font_bold 2812 color_r% = 0 : color_g% = 0 : color_b% = 0 command_target_is 0 : return
' afficher le color picker color_picker: if co=16 caption 2812,"Couleur <transparent>" else caption 2812,"Palette normale" end_if text 2806,str$(r(co)) : text 2807,str$(g(co)) : text 2808,str$(b(co)) show 2800 return
' changer couleur R, G ou B change_2802: color 2805,position(2802),position(2803),position(2804) text 2806,position(2802) : text 2807,position(2803) : text 2808,position(2804) return
' changer couleur R G ou B par saisie directe change_2806: color_test$ = text$(2806) : gosub corriger_couleur_RGB : text 2806,color_test% : color_r% = color_test% color_test$ = text$(2807) : gosub corriger_couleur_RGB : text 2807,color_test% : color_g% = color_test% color_test$ = text$(2808) : gosub corriger_couleur_RGB : text 2808,color_test% : color_b% = color_test% color 2805,color_r%,color_g%,color_b% position 2802,color_r% : position 2803,color_g% : position 2804,color_b% return
' abandon changer couleur click_2810: color_s$ = "" message "Abandon" : ' ligne à supprimer hide 2800 return
' valider changer couleur ' la couleur est retournée en color_s$ ' et dans les variables color_r%, color_g%, color_g% click_2811: color_s$ = str$(color_pixel_red(2805,1,1))+","+str$(color_pixel_green(2805,1,1))+","+str$(color_pixel_blue(2805,1,1)) r(co)=position(2802) : g(co)=position(2803) : b(co)=position(2804) : ' couleur 'transparente' 2D_TARGET_IS 3: 2D_FILL_COLOR r(co),g(co),b(co) 2D_RECTANGLE 0, 0, 160, 40 2d_target_is 2 2d_pen_color 0,0,0 FOR j% = 0 TO 7 FOR i% = 0 TO 1 c% = j% + 8*i%: 2D_FILL_COLOR r(c%), g(c%), b(c%) x% = i%*80: y% = j%*40 2D_RECTANGLE x%, y%, x%+60, y%+40 NEXT i% NEXT j% hide 2800 return
' corriger une valeur RGB contenue dans color_test% corriger_couleur_RGB: if numeric(color_test$)=1 color_test% = val(color_test$) else color_test% = 0 end_if if color_test%>255 then color_test% = 255 if color_test%<0 then coolor_test% = 0 return
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Editeur d'icônes Sam 24 Juil 2010 - 17:01 | |
| Bon je n'ai pas encore essayé, mais moi de mon côté j'ai aussi intégré une pipette, alors du coup je ne sais plus comment faire, si on développe chacun de son côté ça va poser des problèmes... Pour moi l'intérêt de la pipette c'était surtout de pouvoir travailler avec une couleur qui ne fait pas partie des 16 de base, mais prise dans une icône quelconque lue sur disque, la transparence étant déjà possible je ne tenais pas trop à m'appesantir dessus... Du coup je ne sais plus trop quoi faire, continuer avec ton programme (dont je risque de ne pas bien maîtriser certaines parties) ou avec le mien...
Comprends-moi bien Klaus, je dis ça sans aucune animosité, et je te sais gré de t'intéresser si fort au programme, et je sais bien que ton but n'est que d'aider, mais du coup je me retrouve un peu perplexe, je sens qu'il m'échappe un peu.
En ce qui me concerne, je pense que je vais le laisser en l'état, au moins pour le forum, je voulais faire quelque chose de très simple, c'est fait, mais rien, et surtout pas moi, n'empêche d'en faire quelque chose de plus sophistiqué, si c'est une bonne base de départ, tant mieux. Ca n'empêche pas que je peux suivre les évolutions éventuelles avec intérêt. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Editeur d'icônes Sam 24 Juil 2010 - 17:09 | |
| Non, JL35, tu continues avec le programme comme tu en as envie. C'est ton programme et ton idée; moi, ne ne faisais que soumettre des suggestions. Je continuerai à télécharger ta version, et s'il me faut une variante, je l'appliquerai de mon côté, toujours sur ta version.
Ne crois surtout pas que je voulais usurper ton programme. C'est ta création, et elle le reste. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Editeur d'icônes Sam 24 Juil 2010 - 17:24 | |
| Entendons-nous bien, je sais parfaitement que tes intentions sont honnêtes, que tu as des idées (et que tu codes très vite !), et qu'il est difficile quand on a des idées de ne pas les mettre en pratique, et que tu ne cherches qu'à faire avancer le schmilblick pour le plus grand profit de tous. Mais je crois que je suis arrivé pratiquement au bout de ce que je voulais faire avec les icônes. On peut toujours faire mieux (c'est quasiment toujours le cas en programmation), mais il faut savoir s'arrêter. Bon, je vais publier ma dernière version, avec la pipette, mais elle n'intégrera pas tes dernières modifications à toi. Elle est un peu ... hybride en ce qui concerne la transparence... - Code:
-
' Iconedit.bas éditeur d'icônes DIM w0, h0, wi, hi, we, he, hfe, xi, yi, ic, x%, y%, xc%, yc%, xca%, yca% DIM i%, j%, k%, c%, x1%, y1%, at2, an, pi, pr, pg, pb, xce, yce, wim, him, d%(8) DIM a$, co, rpr$, ftmp$, fpr$, fred$, f$, xou, you, hou, out, cr, cg, cb, iv$ DIM l$, v%, vh$, lh%, obj%, et$, ccr%, ccg%, ccb%, lcou%, hcou%, yac%, grid% DIM r(16), g(16), b(16) DIM pix(64,64) LABEL Desima, Clic, Couleur, Outil, Ico2Des, Des2Ico, Lirbmp, Savbmp LABEL Undo, Format, Pic2Dat, Dat2Pic, DecHex, Cvx, Rdat, rs, Rota90, Aide
DIM ctr, wi%, hi%, bpp% , dbi%, dt%(5000) LABEL Lbmp
DATA "Fill", "2020": ' l, h DATA "000080000001C0000003600000063000000C180000180C000030060000600300" DATA "00C0018001FFFFC001FFFFE0019FFFF0018FFFF00187FFE00183FFC00181FF80" DATA "0180FF0001807E0001803C00018018000FF000003FFE00007FFF80007FFF8000" DATA "7FFF00000FF80000000000000000000000000000000000000000000000000000" DATA "Rot90", "2020" DATA "00000000000000000000000000000000007FFE0000FFFE0001FFFE0003E00000" DATA "07C00000078000000703C3C60707E7EF070C6669070C6669070C6669070C6669" DATA "070C6669070C666F070C66660707E660FFF3E6607FF066603FE066601FC06660" DATA "0F806660070466600207E7E00003C3C000000000000000000000000000000000" DATA "Pipette", "2020" DATA "00000000000000000000000000000000000001E0000003F0000007F8000007F8" DATA "0000F7F800007FF800003FF000007FE00000EF000001C78000038F8000071D80" DATA "000E3880001C70000038E0000071C00000E3800001C70000018E000001DC0000" DATA "07F8000007F00000038000000180000000000000000000000000000000000000" DATA "Transp", "2020" DATA "00000000000000000FFFFFF00800001010000010100000081000000815DF7F68" DATA "10000008180000182055550828AAAA143055550C20AAAA043055550C20AAAA04" DATA "5055550C40AAAA825155550A40AAAA867FFFFFFE21FFFF8421FFFF8421FFFF84" DATA "21FFFF84400000024000000240000002400000027FFFFFFE0000000000000000" DATA "Grille","2020" DATA "00000000000000003FFFFFFC2081020420810204208102042081020420810204" DATA "3FFFFFFC2081020420810204208102042081020420810204208102043FFFFFFC" DATA "2081020420810204208102042081020420810204208102043FFFFFFC20810204" DATA "20810204208102042081020420810204208102043FFFFFFC0000000000000000" DATA "logo", "1010" DATA "00001EC002800280428042823CFE00007EFC448008801C7C020242823C7C0000"
rpr$ = "Z:": ' ******** Répertoire des fichiers de manoeuvre, à ajuster ******* ftmp$ = rpr$ + "Ftmp.bmp" fred$ = rpr$ + "Fred.bmp" fpr$ = rpr$ + "Preced.bmp" iv$ = "C:\Progra~1\Irfanv~1\i_view32.exe ": ' **** à ajuster éventuellement ****
' --------- partie déclaration à inclure dans le programme label form_color_picker, corriger_couleur_RGB, color_picker label change_2802, change_2806, click_2810, click_2811 dim color_r%, color_g%, color_b%, color_s$, color_res%, color_test$, color_test% gosub form_color_picker
' couleurs (les 16 couleurs du basic + transparence) r(0)=0: g(0)=0: b(0)=0: ' noir r(1)=0: g(1)=0: b(1)=128: ' bleu r(2)=0: g(2)=128: b(2)=0: ' vert r(3)=0: g(3)=128: b(3)=128: ' cyan r(4)=128: g(4)=0: b(4)=0: ' rouge r(5)=128: g(5)=0: b(5)=128: ' magenta r(6)=128: g(6)=64: b(6)=0: ' brun r(7)=192: g(7)=192: b(7)=192: ' blanc r(8)=128: g(8)=128: b(8)=128: ' gris r(9)=0: g(9)=0: b(9)=255: ' bleu clair r(10)=0: g(10)=255: b(10)=0: ' vert clair r(11)=0: g(11)=255: b(11)=255: ' cyan clair r(12)=255: g(12)=0: b(12)=0: ' rouge clair r(13)=255: g(13)=0: b(13)=255: ' magenta clair r(14)=255: g(14)=255: b(14)=0: ' jaune r(15)=255: g(15)=255: b(15)=255: ' blanc intense r(16)=255: g(16)=255: b(16)=254: ' couleur 'transparente'
w0 = 900: h0 = 800 WIDTH 0, w0: HEIGHT 0, h0: CAPTION 0, "ICONE/EDIT": ' Form 0
hfe = 640: ' fenêtre de dessin xi = 220: yi = 80: ' coordonnées de la fenêtre pi = 4*ATN(1) co = 0: ' indice couleur courante initiale (noir) ccr% = r(co): ccg% = g(co): ccb% = b(co): ' couleur courante out = 0: ' outil courant initial (point) at2 = 0 ic = 32: ' icône 32x32 grid% = 0
' image principale PICTURE 1: ON_CLICK 1, Clic
' icône grandeur nature PICTURE 4: PICTURE 5 GOSUB Desima
' tableau des couleurs lcou% = 80: hcou% = 30: ' dimension des cases PICTURE 2: TOP 2, yi+hfe-8*hcou%: LEFT 2, 20: WIDTH 2, 2*lcou%: HEIGHT 2, 9*hcou% ON_CLICK 2, Couleur 2D_TARGET_IS 2 FOR j% = 0 TO 7 FOR i% = 0 TO 1 c% = j% + 8*i%: 2D_FILL_COLOR r(c%), g(c%), b(c%) x% = i%*lcou%: y% = j%*hcou% 2D_RECTANGLE x%, y%, x%+lcou%, y%+hcou% NEXT i% NEXT j% x% = 80: y% = 8*hcou%: 2D_RECTANGLE x%, y%, x%+lcou%, y%+hcou% 2D_PEN_COLOR 128,128,128 2D_LINE x%, y%, x%+lcou%, y%+hcou%: 2D_LINE x%, y%+hcou%, x%+lcou%, y% PRINT_TARGET_IS 2: PRINT_LOCATE x%+8, y%+8: PRINT "Transparente" ' couleur active yac% = yi + hfe - 8*hcou%-50 PICTURE 3: TOP 3, yac%: LEFT 3, 80: WIDTH 3, 50: HEIGHT 3, 40 2D_TARGET_IS 3: 2D_FILL_COLOR ccr%, ccg%, ccb% 2D_RECTANGLE 0, 0, 80, 40
' tableau des outils xou = 50: you = yi+50: hou = 40 PICTURE 10: LEFT 10, xou: TOP 10, you: WIDTH 10, hou: HEIGHT 10, hou 2D_TARGET_IS 10: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou 2D_FILL_COLOR 0,0,0: 2D_RECTANGLE hou/2-3,hou/2-3, hou/2+3, hou/2+3: ' point PICTURE 11: LEFT 11, xou+hou: TOP 11, you: WIDTH 11, hou: HEIGHT 11, hou 2D_TARGET_IS 11: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou 2D_PEN_WIDTH 3: 2D_LINE 10, hou-10, hou-10, 10: ' ligne PICTURE 12: LEFT 12, xou: TOP 12, you+hou: WIDTH 12, hou: HEIGHT 12, hou 2D_TARGET_IS 12: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou 2D_PEN_WIDTH 3: 2D_RECTANGLE 6, 10, hou-6, hou-10: ' rectangle vide PICTURE 13: LEFT 13, xou+hou: TOP 13, you+hou: WIDTH 13, hou: HEIGHT 13, hou 2D_TARGET_IS 13: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou 2D_FILL_COLOR 0,0,0: 2D_RECTANGLE 5, 9, hou-5, hou-9: ' rectangle plein PICTURE 14: LEFT 14, xou: TOP 14, you+2*hou: WIDTH 14, hou: HEIGHT 14, hou 2D_TARGET_IS 14: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou 2D_PEN_WIDTH 3: 2D_CIRCLE hou/2,hou/2,hou/2-6 : ' cercle vide PICTURE 15: LEFT 15, xou+hou: TOP 15, you+2*hou: WIDTH 15, hou: HEIGHT 15, hou 2D_TARGET_IS 15: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou 2D_FILL_COLOR 0,0,0: 2D_CIRCLE hou/2,hou/2,hou/2-5: ' cercle plein
PICTURE 16: LEFT 16, xou: TOP 16, you+3*hou: WIDTH 16, hou: HEIGHT 16, hou 2D_TARGET_IS 16: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou: ' fill x% = 2: y% = 6: obj% = 16: et$ = "Fill": GOSUB Dat2Pic
PICTURE 17: LEFT 17, xou+hou: TOP 17, you+3*hou: WIDTH 17, hou: HEIGHT 17, hou 2D_TARGET_IS 17: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou: ' Pipette x% = 0: y% = 2: obj% = 17: et$ = "Pipette": GOSUB Dat2Pic
PICTURE 18: LEFT 18, xou: TOP 18, you+4*hou: WIDTH 18, hou: HEIGHT 18, hou 2D_TARGET_IS 18: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou: ' Rotation x% = 0: y% = 2: obj% = 18: et$ = "Rot90": GOSUB Dat2Pic
PICTURE 19: LEFT 19, xou+hou: TOP 19, you+4*hou: WIDTH 19, hou: HEIGHT 19, hou 2D_TARGET_IS 19: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou: ' RAZ PRINT_TARGET_IS 19: FONT_SIZE 19,12: FONT_BOLD 19: PRINT: PRINT "RAZ"
PICTURE 20: LEFT 20, xou: TOP 20, you+5*hou: WIDTH 20, hou: HEIGHT 20, hou 2D_TARGET_IS 20: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou: ' Transparence x% = 0: y% = 4: obj% = 20: et$ = "Transp": GOSUB Dat2Pic
PICTURE 21: LEFT 21, xou+hou: TOP 21, you+5*hou: WIDTH 21, hou: HEIGHT 21, hou 2D_TARGET_IS 21: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou: ' Grille x% = 0: y% = 4: obj% = 21: et$ = "Grille": GOSUB Dat2Pic
PICTURE 22: LEFT 22, xou: TOP 22, you+6*hou: WIDTH 22, hou: HEIGHT 22, hou 2D_TARGET_IS 22: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou: ' libre
PICTURE 23: LEFT 23, xou+hou: TOP 23, you+6*hou: WIDTH 23, hou: HEIGHT 23, hou 2D_TARGET_IS 23: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou: ' libre
FOR i% = 10 TO 23: ON_CLICK i%, Outil: NEXT i%
' outil actif PICTURE 26: TOP 26, yac%: LEFT 26, 140: WIDTH 26, hou: HEIGHT 26, hou 2D_TARGET_IS 26: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou 2D_FILL_COLOR 0,0,0: 2D_RECTANGLE hou/2-3,hou/2-3, hou/2+3, hou/2+3: ' point
x%=xi+ic*we-20:y%=yi+ic*he+5:obj%=0:et$="logo":GOSUB Dat2Pic
' boutons BUTTON 30: TOP 30, 5: LEFT 30, 10: WIDTH 30, 120: HEIGHT 30, 25 CAPTION 30, "Lire BMP/ICO" ON_CLICK 30, Lirbmp BUTTON 31: TOP 31, 35: LEFT 31, 10: WIDTH 31, 120: HEIGHT 31, 25 CAPTION 31, "Sauve BMP/ICO" ON_CLICK 31, Savbmp BUTTON 32: TOP 32, 65: LEFT 32, 10: WIDTH 32, 120: HEIGHT 32, 25 CAPTION 32, "Sauve Datas (progr.)" ON_CLICK 32, Pic2Dat BUTTON 33: TOP 33, 95: LEFT 33, 10: WIDTH 33, 120: HEIGHT 33, 25 CAPTION 33, "Undo" ON_CLICK 33, Undo BUTTON 34: TOP 34, 5: LEFT 34, w0-80: WIDTH 34, 60: HEIGHT 34, 30 CAPTION 34, "Aide": ON_CLICK 34, Aide
' directives ALPHA 40: TOP 40, yi+ic*he+10: LEFT 40, xi+50 FONT_SIZE 40, 12: FONT_BOLD 40: CAPTION 40, "Outil Point: Clic le point à colorer" ALPHA 41: TOP 41, yac%: LEFT 41, 20 FONT_SIZE 41, 12: FONT_BOLD 41: CAPTION 41, "Couleur"+chr$(10)+" active:" ALPHA 42: TOP 42, you+35: LEFT 42, 20: WIDTH 42, 20 FONT_SIZE 42, 12 CAPTION 42,"O"+CHR$(10)+"U"+CHR$(10)+"T"+CHR$(10)+"I"+CHR$(10)+"L"+CHR$(10)+"S"
' options (format) CONTAINER_OPTION 50: TOP 50, 20: LEFT 50, xi: WIDTH 50, hfe-50: HEIGHT 50, 50 FONT_SIZE 50, 12: FONT_BOLD 50 CAPTION 50, " Format: " OPTION 51: PARENT 51, 50: TOP 51, 24: LEFT 51, 90: CAPTION 51, "16 x 16" OPTION 52: PARENT 52, 50: TOP 52, 24: LEFT 52, 190: CAPTION 52, "24 x 24" OPTION 53: PARENT 53, 50: TOP 53, 24: LEFT 53, 290: CAPTION 53, "32 x 32" OPTION 54: PARENT 54, 50: TOP 54, 24: LEFT 54, 390: CAPTION 54, "48 x 48" OPTION 55: PARENT 55, 50: TOP 55, 24: LEFT 55, 490: CAPTION 55, "64 x 64" FOR i% = 51 TO 55: ON_CLICK i%, Format: NEXT i% MARK_ON 53
END ' ============================================================================ Desima: ' icône grandeur nature TOP 4, yi: LEFT 4, xi-ic-10: WIDTH 4, ic+4: HEIGHT 4, ic+4 COLOR 4, 0,255,0 TOP 5, yi+2: LEFT 5, xi-ic-8: WIDTH 5, ic: HEIGHT 5, ic 2D_TARGET_IS 5 2D_FILL_COLOR r(16),g(16),b(16): 2D_PEN_COLOR r(16),g(16),b(16): 2D_RECTANGLE 0, 0, ic, ic ' zone de dessin we = hfe/ic: he = we TOP 1, yi: LEFT 1, xi: WIDTH 1, ic*we: HEIGHT 1, ic*he 2D_TARGET_IS 1 2D_FILL_COLOR r(16),g(16),b(16): 2D_PEN_COLOR r(16),g(16),b(16): 2D_RECTANGLE 1, 1, hfe, hfe GOSUB Ico2Des RETURN
Clic: x% = MOUSE_X_LEFT_DOWN(1): xca% = INT(x%/we) y% = MOUSE_Y_LEFT_DOWN(1): yca% = INT(y%/he) pr = COLOR_PIXEL_RED(5, xca%, yca%): ' couleur du clic pg = COLOR_PIXEL_GREEN (5, xca%, yca%) pb = COLOR_PIXEL_BLUE (5, xca%, yca%) IF out = 7: ' pipette ccr% = pr: ccg% = pg: ccb% = pb: ' nouvelle couleur active 2D_TARGET_IS 3: 2D_FILL_COLOR ccr%, ccg%, ccb% 2D_RECTANGLE 0, 0, 160, 40 END_IF FILE_SAVE 5, fpr$ IF out = 4 AND at2 = 0 ' couleur d'origine du centre dans pr, pg, pb, pour effacement ultérieur pr = COLOR_PIXEL_RED(5, xca%, yca%): ' couleur d'origine du centre du cercle pg = COLOR_PIXEL_GREEN (5, xca%, yca%): ' pour effacement ultérieur pb = COLOR_PIXEL_BLUE (5, xca%, yca%) xce = xca%: yce = yca%: ' centre cliqué END_IF 2D_TARGET_IS 5: 2D_PEN_COLOR ccr%, ccg%, ccb% IF out < 6 THEN 2D_POINT xca%, yca% xc% = xca%*we: yc% = yca%*he 2D_TARGET_IS 1 if co=16 2D_FILL_COLOR 255,255,254 2D_RECTANGLE xc%, yc%, xc%+we+1, yc%+he+1 2d_line xc%,yc%+he+1,xc%+we+1,yc% 2d_line xc%,yc%,xc%+we+1,yc%+he+1 else 2D_FILL_COLOR ccr%, ccg%, ccb% 2D_RECTANGLE xc%, yc%, xc%+we+1, yc%+he+1 end_if IF at2 <> 0 2D_TARGET_IS 5 SELECT at2 CASE 1: 2D_LINE x1%, y1%, xca%, yca% CAPTION 40, "Outil Ligne: Clic le point de départ de la ligne" CASE 2: 2D_LINE x1%, y1%, xca%, y1%: 2D_POLY_TO xca%,yca% 2D_POLY_TO x1%, yca%: 2D_POLY_TO x1%, y1% CAPTION 40, "Outil Rectangle vide: Clic le 1er coin du rectangle" CASE 3: 2D_FILL_COLOR ccr%, ccg%, ccb%: 2D_RECTANGLE x1%,y1%,xca%+1,yca%+1 CAPTION 40, "Outil Rectangle plein: Clic le 1er coin du rectangle" CASE 4: j% = INT(SQR((xca%-x1%)*(xca%-x1%)+(yca%-y1%)*(yca%-y1%))): ' rayon IF j%<2 THEN RETURN FOR an = 0 to 2*pi STEP 1/j% x% = x1%+j%*COS(an): y% = y1%+j%*SIN(an) 2D_POINT x%, y% NEXT an 2D_PEN_COLOR pr, pg, pb: 2D_POINT xce, yce CAPTION 40, "Outil Cercle vide: Clic le centre du cercle" CASE 5: j% = INT(SQR((xca%-x1%)*(xca%-x1%)+(yca%-y1%)*(yca%-y1%))) IF j%<2 THEN RETURN 2D_FILL_COLOR ccr%, ccg%, ccb%: 2D_CIRCLE x1%, y1%, j% CAPTION 40, "Outil Cercle plein: Clic le centre du cercle" END_SELECT GOSUB Ico2Des at2 = 0 ELSE x1% = xca%: y1% = yca% SELECT out CASE 1: CAPTION 40, "Outil Ligne: Clic le point d'arrivée de la ligne" at2 = 1 CASE 2: CAPTION 40, "Outil Rectangle vide: Clic le coin opposé du rectangle" at2 = 2 CASE 3: CAPTION 40, "Outil Rectangle plein: Clic le coin opposé du rectangle" at2 = 3 CASE 4: CAPTION 40, "Outil Cercle vide: Clic un point de la circonférence" at2 = 4 CASE 5: CAPTION 40, "Outil Cercle plein: Clic un point du cercle de la circonférence" at2 = 5 CASE 6: 2D_TARGET_IS 5: 2D_FLOOD xca%, yca%, ccr%, ccg%, ccb% GOSUB Ico2Des END_SELECT END_IF RETURN
Couleur: x% = MOUSE_X_LEFT_DOWN(2): xc% = INT(x%/lcou%) y% = MOUSE_Y_LEFT_DOWN(2): yc% = INT(y%/hcou%) co = yc% + 8*xc% ccr% = r(co): ccg% = g(co): ccb% = b(co): ' nouvelle couleur courante 2D_TARGET_IS 3: 2D_FILL_COLOR ccr%, ccg%, ccb% 2D_RECTANGLE 2, 1, 50, 40 IF co = 16 THEN 2D_LINE 1, 1, 50, 40: 2D_LINE 1, 40, 50, 0 RETURN
Outil: FOR i% = 10 TO 23 IF CLICKED(i%) = 1 THEN EXIT_FOR NEXT i% IF i% = 21 grid% = 1 - grid%: GOSUB Ico2Des RETURN END_IF IF i% = 20 GOSUB color_picker: ' choix de la couleur de transparence END_IF IF i% = 19 i% = MESSAGE_CONFIRMATION_YES_NO("Effacer entièrement le dessin") IF i% = 1 THEN GOSUB Desima: ' retour à l'état d'origine RETURN END_IF IF i% = 18 GOSUB Rota90: GOSUB Ico2Des RETURN END_IF out = i% - 10 2D_TARGET_IS 26: 2D_FILL_COLOR 230,230,230: 2D_RECTANGLE 0,0,hou,hou: ' raz outil actif SELECT out CASE 0: CAPTION 40, "Outil Point: Clic le point à colorer" 2D_FILL_COLOR 0,0,0: 2D_RECTANGLE hou/2-3,hou/2-3, hou/2+3, hou/2+3: ' point CASE 1: CAPTION 40, "Outil Ligne: Clic le point de départ de la ligne" 2D_PEN_WIDTH 3: 2D_LINE 10, hou-10, hou-10, 10: ' ligne CASE 2: CAPTION 40, "Outil Rectangle vide: Clic le 1er coin du rectangle" 2D_PEN_WIDTH 3: 2D_RECTANGLE 6, 10, hou-6, hou-10: ' rectangle vide CASE 3: CAPTION 40, "Outil Rectangle plein: Clic le 1er coin du rectangle" 2D_FILL_COLOR 0,0,0: 2D_RECTANGLE 5, 9, hou-5, hou-9: ' rectangle plein CASE 4: CAPTION 40, "Outil Cercle vide: Clic le centre du cercle" 2D_PEN_WIDTH 3: 2D_CIRCLE hou/2,hou/2,hou/2-6 : ' cercle vide CASE 5: CAPTION 40, "Outil Cercle plein: Clic le centre du cercle" 2D_FILL_COLOR 0,0,0: 2D_CIRCLE hou/2,hou/2,hou/2-5: ' cercle plein CASE 6: CAPTION 40, "Outil Flood: clic un point de la surface à remplir" x% = 2: y% = 6: obj% = 26: et$ = "Fill": GOSUB Dat2Pic CASE 7: CAPTION 40, " Clic une case de la zone dessin" x% = 0: y% = 2: obj% = 26: et$ = "Pipette": GOSUB Dat2Pic END_SELECT RETURN
Ico2Des: ' recopie de l'icône grandeur nature dans l'espace de dessin 2D_TARGET_IS 1 FOR j% = 0 TO ic-1 FOR i% = 0 TO ic-1 cr = COLOR_PIXEL_RED(5, i%, j%) cg = COLOR_PIXEL_GREEN (5, i%, j%) cb = COLOR_PIXEL_BLUE (5, i%, j%) xc% = i%*we: yc% = j%*he IF cr=r(16) AND cg=g(16) AND cb=b(16) ' couleur 'transparente' 2D_PEN_COLOR 200,200,200 2D_FILL_COLOR 255,255,254 2D_RECTANGLE xc%, yc%, xc%+we+1, yc%+he+1 2D_LINE xc%,yc%,xc%+we,yc%+he: 2D_LINE xc%, yc%+he, xc%+we, yc% ELSE 2D_FILL_COLOR cr, cg, cb 2D_RECTANGLE xc%, yc%, xc%+we+1, yc%+he+1 END_IF NEXT i% NEXT j% 2D_PEN_COLOR 96,96,96 2D_LINE 0, 0, hfe-1, 0: 2D_POLY_TO hfe-1, hfe-1: 2D_POLY_TO 0, hfe-1: 2D_POLY_TO 0, 0 IF grid% = 1 ' 2D_LINE 0, hfe/2, hfe, hfe/2: 2D_LINE hfe/2, 0, hfe/2, hfe : ' axes FOR i% = 0 TO hfe STEP 8*hfe/ic 2D_LINE 0, i%, hfe, i%: 2D_LINE i%, 0, i%, hfe NEXT i% END_IF RETURN
Des2Ico: ' recopie de l'espace de dessin dans l'icône grandeur nature 2D_TARGET_IS 5 FOR j% = 0 TO ic-1 FOR i% = 0 TO ic-1 xc% = i%*we+we/2: yc% = j%*he+he/2 cr = COLOR_PIXEL_RED(1, xc%, yc%) cg = COLOR_PIXEL_GREEN (1, xc%, yc%) cb = COLOR_PIXEL_BLUE (1, xc%, yc%) 2D_PEN_COLOR cr,cg,cb: 2D_POINT i%, y% NEXT i% NEXT j% RETURN
Lirbmp: ' Charger une image bmp ou une icône dans la zone dessin OPEN_DIALOG 61 FILTER 61, "Fichiers BMP/ICO|*.bmp;*.ico" f$ = FILE_NAME$(61): DELETE 61: IF f$ = "_" THEN RETURN a$ = UPPER$(RIGHT$(f$, 4)) IF a$ = ".ICO" EXECUTE_WAIT iv$ + f$ + " /convert=" + ftmp$: f$ = ftmp$ ELSE IF a$ <> ".BMP" THEN RETURN END_IF ' dimensions wi x hi du fichier bmp f$ FILEBIN_OPEN_READ 1, f$ FILEBIN_POSITION 1, 18 FOR i% = 1 TO 8: FILEBIN_READ 1, d%(i%): NEXT i% wim = d%(1) + 256*d%(2) + 256*256*d%(3) + 256*256*256*d%(4) him = d%(5) + 256*d%(6) + 256*256*d%(7) + 256*256*256*d%(8) FILEBIN_CLOSE 1 IF wim<>ic ' redimensionner l'image (le stretch_on ne convient pas, il ne redimensionne ' l'image que visuellement, pas en mémoire) a$ = " /resize=(" + STR$(ic) + "," + STR$(ic) + ")" EXECUTE_WAIT iv$ + f$ + a$ + " /convert=" + fred$ FILE_LOAD 5, fred$ ELSE FILE_LOAD 5, f$ END_IF GOSUB Ico2Des RETURN
Savbmp: ' sauvegarde de l'icône actuelle en fichier BMP ou ICO SAVE_DIALOG 61: FILTER 61, "Fichier BMP/ICO|*.bmp;*.ico" f$ = FILE_NAME$(61): DELETE 61: IF f$ = "_" THEN RETURN a$ = UPPER$(RIGHT$(f$, 4)) IF a$ = ".ICO" FILE_SAVE 5, ftmp$ EXECUTE_WAIT iv$ + ftmp$ + " /convert=" + f$: ' conversion bmp -> ico ELSE FILE_SAVE 5, f$ END_IF RETURN
Undo: FILE_LOAD 5, fpr$ GOSUB Ico2Des at2 = 0 RETURN
Format: FOR i% = 51 TO 55 IF CLICKED(i%) = 1 THEN EXIT_FOR NEXT i% SELECT i% CASE 51: ic = 16 CASE 52: ic = 24 CASE 53: ic = 32 CASE 54: ic = 48 CASE 55: ic = 64 END_SELECT GOSUB Desima RETURN
Dimfic: ' dimensions wi x hi du fichier bmp f$ FILEBIN_OPEN_READ 1, f$ FILEBIN_POSITION 1, 18 FOR i% = 1 TO 8: FILEBIN_READ 1, d%(i%): NEXT i% wi = d%(1) + 256*d%(2) + 256*256*d%(3) + 256*256*256*d%(4) hi = d%(5) + 256*d%(6) + 256*256*d%(7) + 256*256*256*d%(8) FILEBIN_CLOSE 1 RETURN
Pic2Dat: ' Copie dans le clipboard de l'image (N/B) sous forme de lignes de datas l$ = "": lh% = 2 FOR y% = 0 TO ic-1 FOR x% = 0 TO ic-1 STEP 8 v% = 0 FOR i% = 0 to 7 cr = COLOR_PIXEL_RED(5,x%+i%,y%) cg = COLOR_PIXEL_GREEN(5,x%+i%,y%) cb = COLOR_PIXEL_BLUE(5,x%+i%,y%) IF (cr+cg+cb) < 750 : ' non blanc ou transparent v% = v% + POWER(2, 7-i%) END_IF NEXT i% GOSUB DecHex l$ = l$ + vh$ NEXT x% NEXT y% ' sauvegarde de l$ dans le fichier Z:\Icone.txt FILE_OPEN_WRITE 1, "Z:\Icone.txt" FILE_WRITELN 1, l$ FILE_CLOSE 1 ' sauvegarde de l$ sous forme de lignes de datas dans le clipboard v% = ic: GOSUB DecHex a$ = "DATA " + CHR$(34) + "?????" + CHR$(34) + ",": ' futur nom d'icône a$ = a$ + CHR$(34)+vh$+vh$+CHR$(34)+CHR$(13)+CHR$(10): ' largeur, hauteur rs: IF LEN(l$) > 64 a$ = a$ + "DATA " + CHR$(34) + LEFT$(l$, 64) + CHR$(34) + CHR$(13) + CHR$(10) l$ = MID$(l$, 65, LEN(l$) - 64): GOTO rs END_IF a$ = a$ + "DATA " + CHR$(34) + l$ + CHR$(34) CLIPBOARD_STRING_COPY a$ a$ = "Le dessin a été sauvegardé dans le clipboard" + CHR$(10) a$ = a$ + "sous forme de lignes de datas en hexadécimal" MESSAGE a$ RETURN
Dat2Pic: ' Positionnement de lecture des datas après le label et$ RESTORE: REPEAT: READ a$: UNTIL a$ = et$ ' dessin des datas en x%, y% dans l'objet système obj% READ l$: vh$ = LEFT$(l$, 2): GOSUB Cvx: wim = v% vh$ = RIGHT$(l$, 2): GOSUB Cvx: him = v% a$ = "" WHILE LEN(a$) < wim*him/4: READ l$: a$ = a$ + l$: END_WHILE 2D_TARGET_IS obj%: 2D_PEN_COLOR 0,0,0 FOR j% = 0 TO him - 1 l$ = MID$(a$, 1+j%*wim/4, wim/4) FOR i% = 1 TO LEN(l$) v% = INSTR("0123456789ABCDEF", MID$(l$, i%, 1))-1 FOR k% = 0 TO 4 IF BIN_AND(v%, POWER(2, 3-k%)) > 0 2D_POINT x%+i%*4+k%, y%+j% END_IF NEXT k% NEXT i% NEXT j% GOTO Rdat Cvx: ' conversion hexadécimal/décimal de vh$, résultat dans v% v% = 0 FOR k% = 1 TO LEN(vh$) v% = v%*16 + INSTR("0123456789ABCDEF", MID$(vh$, k%, 1))-1 NEXT k% RETURN Rdat: RETURN ' dessin des datas en x%, y% dans l'objet système obj% RESTORE READ l$: vh$ = LEFT$(l$, 2): GOSUB Cvx: wim = v% vh$ = RIGHT$(l$, 2): GOSUB Cvx: him = v% a$ = "" WHILE LEN(a$) < wim*him/4: READ l$: a$ = a$ + l$: END_WHILE 2D_TARGET_IS obj%: 2D_PEN_COLOR 0,0,0 FOR j% = 0 TO him - 1 l$ = MID$(a$, 1+j%*wim/4, wim/4) FOR i% = 1 TO LEN(l$) v% = INSTR("0123456789ABCDEF", MID$(l$, i%, 1))-1 FOR k% = 0 TO 4 IF BIN_AND(v%, POWER(2, 3-k%)) > 0 2D_POINT x%+i%*4+k%, y%+j% END_IF NEXT k% NEXT i% NEXT j% GOTO Rdat Cvx: ' conversion hexadécimal/décimal de vh$, résultat dans v% v% = 0 FOR k% = 1 TO LEN(vh$) v% = v%*16 + INSTR("0123456789ABCDEF", MID$(vh$, k%, 1))-1 NEXT k% RETURN Rdat: RETURN
DecHex: ' conversion décimal/hexa de v%, résultat vh$ (complété si utile à lh% caractères) vh$="": IF lh% < 1 THEN lh% = 1 REPEAT vh$ = MID$("0123456789ABCDEF", 16*(v%/16-INT(v%/16))+1, 1) + vh$: v% = INT(v%/16) UNTIL v% <= 0 IF LEN(vh$) < lh% THEN vh$ = STRING$(lh% - LEN(vh$), "0") + vh$ RETURN
Rota90: FILE_SAVE 5, fpr$ ' rotation de l'icône de 90° à gauche FOR y% = 0 TO ic-1 i% = y% FOR x% = 0 TO ic-1 j% = ic-1-x% pr = COLOR_PIXEL_RED(5, x%, y%) pg = COLOR_PIXEL_GREEN(5, x%, y%) pb = COLOR_PIXEL_BLUE(5, x%, y%) pix(j%,i%) = 65536*pr + 256*pg + pb NEXT x% NEXT y% 2D_TARGET_IS 5 FOR y% = 0 TO ic-1 FOR x% = 0 TO ic-1 pr = INT(pix(y%,x%)/65536) pg = BIN_AND(INT(pix(y%,x%)/256), 255) pb = BIN_AND(pix(y%,x%), 255) 2D_PEN_COLOR pr, pg, pb: 2D_POINT x%, y% NEXT x% NEXT y% RETURN
Lbmp: ' Affichage de l'image bmp (type 16M de couleurs) f$ en x%, y% de l'objet obj% ctr = 0: ' couleur transparente FILEBIN_OPEN_READ 1, f$: FILEBIN_BLOCK_READ 1, 32, dt%(0) wi% = dt%(18)+256*dt%(19): hi% = dt%(22)+256*dt%(23): ' largeur et hauteur bpp% = dt%(28)/8: ' octets par pixel FILEBIN_POSITION 1, dt%(10)+256*dt%(11): ' début datas image 2D_TARGET_IS obj% FOR j% = 1 TO hi% FILEBIN_BLOCK_READ 1, wi%*bpp%, dt%(0) FOR i% = 0 TO wi%-1 ccb% = dt%(i%*bpp%): ccg% = dt%(i%*bpp%+1): ccr% = dt%(i%*bpp%+2) IF (256*256*ccr% + 256*ccg% + ccb%) <> ctr 2D_PEN_COLOR ccr%, ccg%, ccb%: 2D_POINT x%+i%, y%+hi%-j% END_IF NEXT i% NEXT j% FILEBIN_CLOSE 1 RETURN
Aide: a$ = chr$(9) + chr$(9) + chr$(9) + chr$(9) + "EDITEUR D'ICONES" + chr$(10) a$ = a$ + chr$(10) a$ = a$ + "Pour création et/ou modification d'icônes simples." + chr$(10) a$ = a$ + "- Le programme ne peut manipuler que 16 couleurs." + chr$(10) a$ = a$ + "- Le programme gère partiellement la transparence." + chr$(10) a$ = a$ + chr$(10) a$ = a$ + "Deux zones d'images: la zone de dessin agrandie à droite, l'icône grandeur nature"+chr$(10) a$ = a$ + "en haut à gauche." + chr$(10) a$ = a$ + "Chaque case à droite représente un pixel de l'icône." + chr$(10) a$ = a$ + chr$(10) a$ = a$ + "1) Création d'une icône pour usage général (Windows)" + chr$(10) a$ = a$ + "- Choisir l'option format: 16x16, 24x24, 32x32, 48x48 ou 64x64" + chr$(10) a$ = a$ + "- Dessiner l'icône à l'aide des outils fournis en cliquant sur l'outil désiré:"+chr$(10) a$ = a$ + " Point, Ligne, Rectangle vide ou plein, Cercle vide ou plein, Remplissage,"+chr$(10) a$ = a$ + " Rotation 90° à gauche, Effacement complet du dessin, choix de la couleur 'transparente'."+chr$(10) a$ = a$ + " Il y a possibilité d'un seul retour en arrière (touche 'Undo') en cas d'erreur."+chr$(10) a$ = a$ + " Cliquer sur la couleur de tracé désirée (16 couleurs disponibles), ou à l'aide de l'outil"+chr$(10) a$ = a$ + " 'pipette' sur une des couleurs du dessin."+chr$(10) a$ = a$ + " La couleur ainsi choisie devient la couleur active."+chr$(10) a$ = a$ + " La couleur active et l'outil actif sont affichés au-dessus du tableau des couleurs."+chr$(10) a$ = a$ + " Pour effacer un point ou une figure: dessiner avec la couleur de fond (transparente),"+chr$(10) a$ = a$ + " ou avec une autre couleur (blanc par exemple, ou autre)."+chr$(10) a$ = a$ + " La couleur transparente peut se choisir en cliquant sur l'outil correspondant (contribution de Klaus)."+chr$(10) a$ = a$ + " Elle est implicitement le noir pur (0,0,0) conformément à la norme des 'sprites' Panoramic."+chr$(10) a$ = a$ + "- Sauvegarder l'icône dans un fichier (BMP ou ICO, au choix): clic 'Sauve BMP/ICO'."+chr$(10) a$ = a$ + chr$(10) a$ = a$ + "2) Création d'une icône pour usage sous Panoramic, pour agrémenter un programme."+chr$(10) a$ = a$ + " (fonction à l'usage des programmeurs: bouton 'Sauve Datas')."+chr$(10) a$ = a$ + "- Le dessin créé en noir et blanc sera sauvegardé dans le Clipboard sous forme de lignes"+chr$(10) a$ = a$ + " de DATAs en hexadécimal pour utilisation ultérieure dans un programme Panoramic."+chr$(10) a$ = a$ + " Il suffit de 'Coller' ces lignes de datas dans le nouveau programme, de les faire précéder"+chr$(10) a$ = a$ + " d'un nom en data, et d'appeler le sous-programme Dat2Pic avec en paramètres"+chr$(10) a$ = a$ + " le numéro d'objet destinataire (Picture par exemple), le nom attribué à cette icône"+chr$(10) a$ = a$ + " et les coordonnées x et y de l'emplacement désiré dans l'objet."+chr$(10) a$ = a$ + " On se contentera du noir et blanc (1 bit par pixel), sinon les datas seraient trop"+chr$(10) a$ = a$ + " volumineux."+chr$(10) a$ = a$ + " Les icônes 'remplissage' et 'pipette' de ce programme ont été créées ainsi (voir les datas en tête)."+chr$(10) a$ = a$ + chr$(10) a$ = a$ + "Les directives affichée sous la zone de dessin sont fonction de l'outil choisi."+chr$(10) a$ = a$ + chr$(10) a$ = a$ + "3) Lecture d'une icône (.ICO, ou petite image carrée au format .BMP)"+chr$(10) a$ = a$ + "- Touche 'Lire BMP/ICO', ouverture d'une boîte de dialogue pour choisir le fichier."+chr$(10) a$ = a$ + " On peut modifier l'icône chargée et la sauvegarder modifiée, au format voulu."+chr$(10) a$ = a$ + chr$(10) a$ = a$ + "Les conversions format bmp <-> format ico (Panoramic ne gère pas le format ico) sont"+chr$(10) a$ = a$ + "sous-traitées au programme IrfanView, qui doit donc être présent sur le pc." MESSAGE a$ RETURN
' - Contribution Klaus- ' ****** Création form sélecteur de couleur - sous-programmes à inclure en fin de programme ****** form_color_picker: form 2800 : hide 2800 : command_target_is 2800 : border_hide 2800 : color 2800,220,220,220 top 2800,320 : left 2800,320 : width 2800,500 : height 2800,300 picture 2801 : top 2801,20 : left 2801,20 : width 2801,100 : height 2801,100 scroll_bar 2802 : top 2802,150 : left 2802,20 : width 2802,400 : horizontal 2802 min 2802,0 : max 2802,255 : on_change 2802,change_2802 scroll_bar 2803 : top 2803,170 : left 2803,20 : width 2803,400 : horizontal 2803 min 2803,0 : max 2803,255 : on_change 2803,change_2802 scroll_bar 2804 : top 2804,190 : left 2804,20 : width 2804,400 : horizontal 2804 min 2804,0 : max 2804,255 : on_change 2804,change_2802 picture 2805 : top 2805,23 : left 2805,23 : width 2805,94 : height 2805,96 : color 2805,0,0,0 edit 2806 : top 2806,150 : left 2806,440 : width 2806,30 : text 2806,"0" : on_change 2806,change_2806 edit 2807 : top 2807,170 : left 2807,440 : width 2807,30 : text 2807,"0" : on_change 2807,change_2806 edit 2808 : top 2808,190 : left 2808,440 : width 2808,30 : text 2808,"0" : on_change 2808,change_2806 button 2810 : top 2810,220 : left 2810,20 : caption 2810,"Annuler" : on_click 2810,click_2810 button 2811 : top 2811,220 : left 2811,110 : caption 2811,"Valider" : on_click 2811,click_2811 alpha 2812 : top 2812,20 : left 2812,150 : font_size 2812,12 : font_bold 2812 : caption 2812,"Couleur <transparent>" color_r% = 0 : color_g% = 0 : color_b% = 0 command_target_is 0 : return
' afficher le color picker color_picker: text 2806,str$(r(16)) : text 2807,str$(g(16)) : text 2808,str$(b(16)) show 2800 return
' changer couleur R, G ou B change_2802: color 2805,position(2802),position(2803),position(2804) text 2806,position(2802) : text 2807,position(2803) : text 2808,position(2804) return
' changer couleur R G ou B par saisie directe change_2806: color_test$ = text$(2806) : gosub corriger_couleur_RGB : text 2806,color_test% : color_r% = color_test% color_test$ = text$(2807) : gosub corriger_couleur_RGB : text 2807,color_test% : color_g% = color_test% color_test$ = text$(2808) : gosub corriger_couleur_RGB : text 2808,color_test% : color_b% = color_test% color 2805,color_r%,color_g%,color_b% position 2802,color_r% : position 2803,color_g% : position 2804,color_b% return
' abandon changer couleur click_2810: color_s$ = "" hide 2800 return
' valider changer couleur ' la couleur est retournée en color_s$ ' et dans les variables color_r%, color_g%, color_g% click_2811: color_s$ = str$(color_pixel_red(2805,1,1))+","+str$(color_pixel_green(2805,1,1))+","+str$(color_pixel_blue(2805,1,1)) r(16)=position(2802) : g(16)=position(2803) : b(16)=position(2804) : ' couleur 'transparente' hide 2800 return
' corriger une valeur RGB contenue dans color_test% corriger_couleur_RGB: if numeric(color_test$)=1 color_test% = val(color_test$) else color_test% = 0 end_if if color_test%>255 then color_test% = 255 if color_test%<0 then coolor_test% = 0 return Edité le 25/7
Dernière édition par JL35 le Dim 25 Juil 2010 - 16:54, édité 4 fois | |
| | | Contenu sponsorisé
| Sujet: Re: Editeur d'icônes | |
| |
| | | | Editeur d'icônes | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |