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

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Fabrication d'icônes Emptypar papydall Hier à 16:57

» PANORAMIC V 1
Fabrication d'icônes Emptypar papydall Hier à 3:22

» select intégrés [résolu]
Fabrication d'icônes Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
Fabrication d'icônes Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
Fabrication d'icônes Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
Fabrication d'icônes Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
Fabrication d'icônes Emptypar papydall Mer 8 Mai 2024 - 4:17

» bouton dans autre form que 0
Fabrication d'icônes Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Fabrication d'icônes Emptypar Klaus Lun 6 Mai 2024 - 11:41

» Gestion d'un système client-serveur.
Fabrication d'icônes Emptypar Klaus Lun 6 Mai 2024 - 10:23

» @Jack
Fabrication d'icônes Emptypar Jack Mar 30 Avr 2024 - 20:40

» Une calculatrice en une ligne de programme
Fabrication d'icônes Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
Fabrication d'icônes Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
Fabrication d'icônes Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
Fabrication d'icônes Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
Le Deal du moment : -20%
Ecran PC GIGABYTE 28″ LED M28U 4K ( IPS, 1 ms, ...
Voir le deal
399 €

 

 Fabrication d'icônes

Aller en bas 
2 participants
AuteurMessage
JL35




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

Fabrication d'icônes Empty
MessageSujet: Fabrication d'icônes   Fabrication d'icônes EmptyJeu 19 Mar 2015 - 21:55

Un petit (enfin, disons moyen) programme de fabrication d'icônes que j'avais déjà publié en 2010 et que j'ai un peu arrangé.

Ça permet de fabriquer de toutes pièces, ou bien d'éditer une icône existante, pour utilisation sous Windows (par exemple sur le bureau), avec gestion de la transparence.
Ou bien des icônes simplifiées pour utilisation dans un programme Panoramic.
Simplifiées parce qu'elles sont en noir et blanc, du fait que le résultat est donné sous forme de lignes de datas à intégrer dans un programme en fabrication, lesquels datas seront lus par une sub fournie: Dat2Pic() pour afficher l'icône dans un objet choisi (picture).
En effet dans ce cas il n'y a qu'un bit par pixel d'image (0 ou 1), ce qui limite l'encombrement. Avec de la couleur ça deviendrait prohibitif.
Dans le programme lui-même les icônes des outils ont été fabriquées de cette façon, et sont exploitées de même.

Je pense que l'aide intégrée est bien suffisante, ce n'est pas bien compliqué...

Le programme fait appel à IrfanView pour les traitements d'image délicats, son chemin d'accès est à ajuster en début de programme, ainsi que le chemin des fichiers temporaires.
Code:
' Iconedit.bas éditeur d'icônes
LABEL Desima, Desoutil, Desfl, Clic, Couleur, Outil, Ico2Des, Des2Ico, Lirbmp, Savbmp
LABEL Undo, Format, Pic2Dat, rs, Rota90, Aide, Stxt, Dessy, Decal, Sym, Teinte, Transpar
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$, b$, co, rpr$, ftmp$, fpr$, fred$, f$, xou, you, hou, out, cr, cg, cb, iv$, on
DIM l$, v%, vh$, obj%, sob%, et$, ccr%, ccg%, ccb%, lcou%, hcou%, yac%, grid%
DIM pix(64,64), r(16), g(16), b(16),al$
DIM xcr%, ycr%, ysy%, prc, pgc, pbc, cst%, wd%, hd%, xt%, yt%, wf%, xf%, yf%
' ============================  CHEMINS À AJUSTER ==============================
iv$ = "C:\Progra~2\Irfanv~1\i_view32.exe ": ' Chemin de IrfanView
rpr$ = "C:\Temp"+CHR$(92): ' ******** Répertoire des fichiers de manoeuvre
ftmp$ = rpr$ + "Ftmp.bmp": ' Fichiers temporaires
fred$ = rpr$ + "Fred.bmp"
fpr$ = rpr$ + "Preced.bmp"
' ==============================================================================
al$ = CHR$(10)

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 "Grille","2020"
DATA "00000000000000003FFFFFFC2081020420810204208102042081020420810204"
DATA "3FFFFFFC2081020420810204208102042081020420810204208102043FFFFFFC"
DATA "2081020420810204208102042081020420810204208102043FFFFFFC20810204"
DATA "20810204208102042081020420810204208102043FFFFFFC0000000000000000"
DATA "Texte","2020"
DATA "000000000000000000000000000000000000000007FFFFE007FFFFE007FFFFE0"
DATA "07FFFFE00603C0600403C0200003C0000003C0000003C0000003C0000003C000"
DATA "0003C0000003C0000003C0000003C0000003C0000003C0000003C0000003C000"
DATA "0003C0000007E000000FF0000000000000000000000000000000000000000000"
DATA "Flh","1010"
DATA "00000000018003C003C007E00FF01DB801800180018001800180018000000000"
DATA "Flg","1010"
DATA "0000000000000100030007001E003FFC3FFC1E00070003000100000000000000"
DATA "Flb","1010"
DATA "000000000180018001800180018001801DB80FF007E003C003C0018000000000"
DATA "Fld","1010"
DATA "000000000000008000C000E000783FFC3FFC007800E000C00080000000000000"
DATA "Syv","1830"
DATA "FFFFFF800001800001800001801801803C01807E0180FF0181FF8183FFC187FF"
DATA "E1803C01803C01803C01803C01803C01803C01803C01803C01803C0180000180"
DATA "0001800001FFFFFF800001800001800001803C01803C01803C01803C01803C01"
DATA "803C01803C01803C01803C01803C0187FFE183FFC181FF8180FF01807E01803C"
DATA "01801801800001800001800001FFFFFF"
DATA "Syh","3018"
DATA "FFFFFFFFFFFF8000010000018000010000018000010000018000010000018020"
DATA "0100040180600100060180E00100070181E00100078183E0010007C187FFF11F"
DATA "FFE18FFFF11FFFF18FFFF11FFFF187FFF11FFFE183E0010007C181E001000781"
DATA "80E0010007018060010006018020010004018000010000018000010000018000"
DATA "01000001800001000001FFFFFFFFFFFF"
DATA "logo", "1010"
DATA "00001EC002800280428042823CFE00007EFC448008801C7C020242823C7C0000"

' 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 = 805
WIDTH 0, w0: HEIGHT 0, h0: CAPTION 0, "ICONEDIT :   ÉDITION   D'ICÔNES": BORDER_SMALL 0
COLOR 0,190,255,255: FONT_BOLD 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
cst% = 0
xt% = 0: yt% = 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% = 25: ' dimension des cases
PICTURE 2: TOP 2, yi+hfe-8*hcou%-30: LEFT 2, 20: WIDTH 2, 2*lcou%: HEIGHT 2, 9*hcou%
  COLOR 2,190,255,255
  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%
  ' couleur transparente:
  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%+5: PRINT "Transparente"

ALPHA 70: TOP 70,TOP(2)+HEIGHT(2)+5: LEFT 70,LEFT(2): ' FONT_BOLD_OFF 70
  CAPTION 70,"R           G           B"
SPIN 71: TOP 71,TOP(70)-3: LEFT 71,LEFT(70)+8: WIDTH 71,45
SPIN 72: TOP 72,TOP(71): LEFT 72,LEFT(71)+54: WIDTH 72,WIDTH(71)
SPIN 73: TOP 73,TOP(71): LEFT 73,LEFT(72)+54: WIDTH 73,WIDTH(71)
  POSITION 71,r(16): POSITION 72,g(16): POSITION 73,b(16)
  FOR i% = 71 TO 73: FONT_BOLD_OFF i%: MIN i%,0: MAX i%,255: ON_CHANGE i%,Transpar: NEXT i%
ALPHA 74: TOP 74,TOP(70)-18: LEFT 74,LEFT(70): COLOR 74,210,255,255
  CAPTION 74,"Coul.Transp.:"

' couleur active
yac% = yi + hfe - 8*hcou%-80
PICTURE 3: TOP 3, yac%: LEFT 3, 70: WIDTH 3, 50: HEIGHT 3, 30
  2D_TARGET_IS 3: 2D_FILL_COLOR ccr%, ccg%, ccb%
  2D_RECTANGLE 0, 0, WIDTH(3),HEIGHT(3)
BUTTON 6: TOP 6, yac%-1: LEFT 6, 125: WIDTH 6, 55: HEIGHT 6, 18
  CAPTION 6, "+ clair": ON_CLICK 6, Teinte
  HINT 6, "Éclaircir la teinte de la couleur (non réversible)"
BUTTON 7: TOP 7, yac%+16: LEFT 7, LEFT(6): WIDTH 7, WIDTH(6): HEIGHT 7, 18
  HINT 7, "Assombrir la teinte de la couleur (non réversible)"
  CAPTION 7, "+ foncé": ON_CLICK 7, Teinte

' tableau des outils
xou = 40: you = yi+50: hou = 40
PICTURE 10: LEFT 10, xou: TOP 10, you: WIDTH 10, hou: HEIGHT 10, hou
  HINT 10,"Clic un pixel:"+al$+"il prend la couleur courante"
PICTURE 11: LEFT 11, xou+hou: TOP 11, you: WIDTH 11, hou: HEIGHT 11, hou
  HINT 11, "Clic successivement les points"+al$+"de départ et d'arrivée de la ligne"
PICTURE 12: LEFT 12, xou: TOP 12, you+hou: WIDTH 12, hou: HEIGHT 12, hou
  HINT 12, "Clic deux coins opposés du rectangle plein"
PICTURE 13: LEFT 13, xou+hou: TOP 13, you+hou: WIDTH 13, hou: HEIGHT 13, hou
  HINT 13, "Clic deux coins opposés du rectangle vide"
PICTURE 14: LEFT 14, xou: TOP 14, you+2*hou: WIDTH 14, hou: HEIGHT 14, hou
  HINT 14, "Clic successivement le centre"+al$+"et un point de la circonférence"
PICTURE 15: LEFT 15, xou+hou: TOP 15, you+2*hou: WIDTH 15, hou: HEIGHT 15, hou
  HINT 15, "Clic successivement le centre"+al$+"et un point de la circonférence"
PICTURE 16: LEFT 16, xou: TOP 16, you+3*hou: WIDTH 16, hou: HEIGHT 16, hou
  HINT 16, "Clic un point de la zone à remplir de la couleur courante"
PICTURE 17: LEFT 17, xou+hou: TOP 17, you+3*hou: WIDTH 17, hou: HEIGHT 17, hou
  HINT 17, "La couleur du point cliqué"+al$+"devient la couleur courante"
PICTURE 18: LEFT 18, xou: TOP 18, you+4*hou: WIDTH 18, hou: HEIGHT 18, hou
  HINT 18, "Rotation de l'image de 90° à gauche"
PICTURE 19: LEFT 19, xou+hou: TOP 19, you+4*hou: WIDTH 19, hou: HEIGHT 19, hou
  HINT 19, "Effacement total du dessin"+al$+"après confirmation"
PICTURE 20: LEFT 20, xou: TOP 20, you+5*hou: WIDTH 20, hou: HEIGHT 20, hou
  ' HINT 20, "Choix de la couleur de transparence"
  HINT 20, "Superposition d'une grille repère de 8x8 pixels (on/off)"
PICTURE 21: LEFT 21, xou+hou: TOP 21, you+5*hou: WIDTH 21, hou: HEIGHT 21, hou
  ' HINT 21, "Superposition d'une grille repère de 8x8 pixels"
  HINT 21, "Insertion de caractères alphanumériques"
PICTURE 22: LEFT 22, xou: TOP 22, you+6*hou: WIDTH 22, hou: HEIGHT 22, hou
  ' HINT 22, "Insertion de caractères alphanumériques"
PICTURE 23: LEFT 23, xou+hou: TOP 23, you+6*hou: WIDTH 23, hou: HEIGHT 23, hou
on = 0
FOR obj% = 10 TO 23
    out = obj%-10: GOSUB Desoutil
    ON_CLICK obj%, Outil
NEXT obj%
OFF_CLICK 22: OFF_CLICK 23: ' outils non définis
out = 0: on = 1: GOSUB Desoutil: ' outil initial

' flèches de décalage de l'image d'un pixel
xcr% = xi-80: ycr% = yi+80
xcr% = xi-95: ycr% = yi+80: wf% = 24
CONTAINER 45: TOP 45,ycr%: LEFT 45,xcr%: WIDTH 45,3*wf%+20: HEIGHT 45,100
  COLOR 45,200,200,255: CAPTION 45, "Translations:"
  xf% = 10: yf% = 20
PICTURE 24: PARENT 24,45: TOP 24, yf%: LEFT 24, xf%+wf%: WIDTH 24,wf%: HEIGHT 24,wf%
  obj% = 24: et$ = "Flh": GOSUB Desfl: ON_CLICK 24, Decal
  HINT 24, "Décalage de l'image"+al$+"d'un pixel vers le haut"
PICTURE 25: PARENT 25,45: TOP 25, yf%+wf%: LEFT 25, xf%: WIDTH 25,wf%: HEIGHT 25,wf%
  obj% = 25: et$ = "Flg": GOSUB Desfl: ON_CLICK 25, Decal
  HINT 25, "Décalage de l'image"+al$+"d'un pixel vers la gauche"
PICTURE 26: PARENT 26,45: TOP 26, yf%+wf%: LEFT 26, xf%+2*wf%: WIDTH 26,wf%: HEIGHT 26,wf%
  obj% = 26: et$ = "Fld": GOSUB Desfl: ON_CLICK 26, Decal
  HINT 26, "Décalage de l'image"+al$+"d'un pixel vers la droite"
PICTURE 27: PARENT 27,45: TOP 27, yf%+2*wf%: LEFT 27, xf%+wf%: WIDTH 27,wf%: HEIGHT 27,wf%
  obj% = 27: et$ = "Flb": GOSUB Desfl: ON_CLICK 27, Decal
  HINT 27, "Décalage de l'image"+al$+"d'un pixel vers le bas"
' symétries
ysy% = ycr% + 120: wf% = 24
CONTAINER 46: TOP 46,ysy%: LEFT 46,xcr%: WIDTH 46,WIDTH(45): HEIGHT 46,80
  COLOR 46,200,200,255: CAPTION 46,"   Symétries:"
  xf% = 5: yf% = 20
PICTURE 28: PARENT 28,46: TOP 28, yf%: LEFT 28, xf%: WIDTH 28, wf%: HEIGHT 28, 2*wf%
  obj% = 28: et$ = "Syv":GOSUB Dessy: ON_CLICK 28, Sym
  HINT 28, "Symétrie verticale"+al$+"de l'ensemble de l'image"
PICTURE 29: PARENT 29,46: TOP 29, yf%+12: LEFT 29, xf%+wf%+5: WIDTH 29, 2*wf%: HEIGHT 29, wf%
  obj% = 29: et$ = "Syh": GOSUB Dessy: ON_CLICK 29, Sym
  HINT 29, "Symétrie horizontale"+al$+"de l'ensemble de l'image"

x%=xi+ic*we-18:y%=10
2D_TARGET_IS 0: 2D_FILL_COLOR 192,255,255: 2D_RECTANGLE x%,y%-2,x%+23,y%+18
obj%=0: et$="logo": Dat2Pic(et$,obj%,x%,y%)

' boutons
BUTTON 30: TOP 30, 5: LEFT 30, 5: WIDTH 30, 130: HEIGHT 30, 25
CAPTION 30, "Lire BMP/ICO"
HINT 30, "Ouvrir un fichier image BMP ou ICO"+al$+"au choix, dans la zone dessin"
ON_CLICK 30, Lirbmp
BUTTON 31: TOP 31, 35: LEFT 31, LEFT(30): WIDTH 31,WIDTH(30): HEIGHT 31, 25
CAPTION 31, "Sauve BMP/ICO"
HINT 31, "Enregistrer l'image actuelle"+al$+"au format BMP ou ICO, au choix"
ON_CLICK 31, Savbmp
BUTTON 32: TOP 32, 65: LEFT 32, LEFT(30): WIDTH 32,WIDTH(30): HEIGHT 32, 25
CAPTION 32, "Sauve Datas (progr.)"
HINT 32, "Enregistrer l'image actuelle sous forme de datas dans le clipboard"
ON_CLICK 32, Pic2Dat
BUTTON 33: TOP 33, 95: LEFT 33, LEFT(30): WIDTH 33,WIDTH(30): HEIGHT 33, 25
CAPTION 33, "Undo"
HINT 33, "Annulation de la dernière action"+al$+"(un seul retour)"
ON_CLICK 33, Undo
BUTTON 34: TOP 34, 34: LEFT 34, w0-80: WIDTH 34, 60: HEIGHT 34, 30
CAPTION 34, "Aide": ON_CLICK 34, Aide

' Texte
EDIT 60: TOP 60, yi+ic*he+10: LEFT 60, xi+50
LIST 63: TOP 63, yi+ic*he: LEFT 63, xi+185: WIDTH 63, 135: HEIGHT 63, 47
FONT_NAMES_LOAD 63
FOR i% = COUNT(63) TO 1 STEP -1
    IF LEFT$(ITEM_READ$(63,i%),1)="@" THEN ITEM_DELETE 63,i%
NEXT i%
ALPHA 61: TOP 61, yi+ic*he+12: LEFT 61, xi+325
FONT_BOLD 61
CAPTION 61, "Taille:"
SPIN 62: TOP 62, yi+ic*he+10: LEFT 62, xi+360: WIDTH 62, 40: HEIGHT 62, 25
MAX 62, 30: MIN 62, 4: POSITION 62, 8
BUTTON 35: TOP 35, yi+ic*he+12: LEFT 35, xi + 405: CAPTION 35, "OK"
BUTTON 36: TOP 36, yi+ic*he+12: LEFT 36, xi + 485: CAPTION 36, "Annul"
ON_CLICK 35, Stxt: ON_CLICK 36, Stxt
HIDE 60: HIDE 61: HIDE 62: HIDE 63: HIDE 35: HIDE 36

' directives
ALPHA 40: TOP 40, yi+ic*he+10: LEFT 40, xi: COLOR 40,255,255,0: FONT_COLOR 40,128,0,0
FONT_SIZE 40, 12: FONT_BOLD 40: CAPTION 40, "Outil Point: Clic le point à colorer"
ALPHA 41: TOP 41, yac%-3: LEFT 41, 10
FONT_SIZE 41, 11: FONT_BOLD 41: CAPTION 41, "Couleur"+al$+" active:"
ALPHA 47: TOP 47,TOP(3)+33: LEFT 47,LEFT(3): FONT_BOLD_OFF 47
  CAPTION 47,"(0,0,0)"
ALPHA 42: TOP 42, you+35: LEFT 42, 15: WIDTH 42, 20: COLOR 42,205,255,255
FONT_SIZE 42, 14
CAPTION 42,"O"+al$+"U"+al$+"T"+al$+" I"+al$+"L"+al$+"S"
ALPHA 43: TOP 43, 5: LEFT 43, xi
FONT_NAME 43, "Verdana": FONT_SIZE 43, 11: FONT_COLOR 43, 0, 0, 255

ALPHA 48: TOP 48, yi+ic*he: LEFT 48, xi+ic*he-70
FONT_BOLD 48

' options (format)
CONTAINER_OPTION 50: TOP 50, 25: LEFT 50, xi: WIDTH 50, hfe-50: HEIGHT 50, 50
FONT_SIZE 50, 12: FONT_BOLD 50: COLOR 50,205,255,255
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
' *****************************************************************************
Desoutil:
sob% = obj%: obj% = out+10
2D_TARGET_IS obj%
IF on = 1
    2D_FILL_COLOR 255,255,0
ELSE
    2D_FILL_COLOR 230,230,230
END_IF
2D_PEN_COLOR 0,0,0: 2D_RECTANGLE 0,0,hou,hou
SELECT out
    CASE 0: 2D_FILL_COLOR 0,0,0: 2D_RECTANGLE hou/2-3,hou/2-3, hou/2+3, hou/2+3: ' point
    CASE 1: 2D_PEN_WIDTH 3: 2D_LINE 10, hou-10, hou-10, 10: ' ligne
    CASE 2: 2D_PEN_WIDTH 3: 2D_RECTANGLE 6, 10, hou-6, hou-10: ' rectangle vide
    CASE 3: 2D_FILL_COLOR 0,0,0: 2D_RECTANGLE 5, 9, hou-5, hou-9: ' rectangle plein
    CASE 4: 2D_PEN_WIDTH 3: 2D_CIRCLE hou/2,hou/2,hou/2-6 : ' cercle vide
    CASE 5: 2D_FILL_COLOR 0,0,0: 2D_CIRCLE hou/2,hou/2,hou/2-5: ' cercle plein
    CASE 6: x% = 2: y% = 6: et$ = "Fill": Dat2Pic(et$,obj%,x%,y%)
    CASE 7: x% = 0: y% = 2: et$ = "Pipette": Dat2Pic(et$,obj%,x%,y%)
    CASE 8: x% = 0: y% = 2: obj% = 18: et$ = "Rot90": Dat2Pic(et$,obj%,x%,y%)
    CASE 9: PRINT_TARGET_IS 19: FONT_SIZE 19,12: FONT_BOLD 19: PRINT: PRINT "RAZ"
    CASE 10: x% = 0: y% = 4: obj% = 20: et$ = "Grille": Dat2Pic(et$,obj%,x%,y%)
    CASE 11: x% = 0: y% = 4: obj% = 21: et$ = "Texte": Dat2Pic(et$,obj%,x%,y%)
    CASE 12: ' libre
    CASE 13: ' libre
END_SELECT
obj% = sob%
RETURN
' *****************************************************************************
Desfl:
2D_TARGET_IS obj%
2D_FILL_COLOR 230,230,230: 2D_PEN_COLOR 0,0,0: 2D_RECTANGLE 0,0,wf%,wf%
x% = 0: y% = 4: Dat2Pic(et$,obj%,x%,y%)
RETURN
' *****************************************************************************
Dessy:
2D_TARGET_IS obj%
COLOR obj%,230,230,230
x% = -4: y% = 0: Dat2Pic(et$,obj%,x%,y%)
RETURN
' *****************************************************************************
Clic:
' Clic dans la zone de dessin
x% = MOUSE_X_LEFT_DOWN(1): xca% = INT(x%/we)
y% = MOUSE_Y_LEFT_DOWN(1): yca% = INT(y%/he)
CAPTION 48, "X=" + STR$(xca%)+"  Y=" + STR$(yca%)
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 = 12
    2D_TARGET_IS 1
    IF cst% = 1
        2D_PEN_COLOR prc,pgc,pbc: 2D_FILL_COLOR prc,pgc,pbc: 2D_RECTANGLE xce,yce,xce+we-1,yce+he-1
        2D_PEN_COLOR prc, pgc, pbc: 2D_POINT xce, yce
    END_IF
    prc = pr: pgc = pg: pbc = pb: ' couleur initiale du centre, pour restore
    xt% = xca%: yt% = yca%
    x% = xca%*we+1: y% = yca%*he+1: xce = x%: yce = y%: ' case cliquée
    2D_FILL_COLOR 255,255,0: 2D_PEN_COLOR 0,0,0: 2D_RECTANGLE x%,y%,x%+we-1,y%+he-1
    2D_PEN_WIDTH 2
    2D_LINE x%+we/4, y%+he/4, x%+3*we/4, y%+he/4
    2D_LINE x%+we/2, y%+he/4, x%+we/2, y%+3*he/4: 2D_PEN_WIDTH 1
    cst% = 1
    RETURN
END_IF
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, WIDTH(3),HEIGHT(3)
    CAPTION 47,"("+STR$(ccr%)+","+STR$(ccg%)+","+STR$(ccb%)+")"
END_IF
FILE_SAVE 5, fpr$
IF out = 4 AND at2 = 0
    prc = pr: pgc = pg: pbc = pb: ' couleur initiale du centre, pour restore
    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 prc, pgc, pbc: 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,WIDTH(3),HEIGHT(3)
IF co = 16 THEN 2D_LINE 1,1,WIDTH(3),HEIGHT(3): 2D_LINE 1,HEIGHT(3),WIDTH(3),0
CAPTION 47,"("+STR$(ccr%)+","+STR$(ccg%)+","+STR$(ccb%)+")"
RETURN
' *****************************************************************************
Outil:
obj% = NUMBER_CLICK
IF obj% > 21 THEN RETURN: ' les outils suivants ne sont pas définis
at2 = 0: ' on abandonne l'action éventuellement en cours
IF cst% = 1
    2D_TARGET_IS 1
    2D_PEN_COLOR prc,pgc,pbc: 2D_FILL_COLOR prc,pgc,pbc: 2D_RECTANGLE xce,yce,xce+we-1,yce+he-1
    2D_PEN_COLOR prc, pgc, pbc: 2D_POINT xce, yce
END_IF
IF obj% = 21
    ' texte
    CAPTION 40, "Texte: ": SHOW 60: SHOW 61: SHOW 62: SHOW 63: SHOW 35: SHOW 36
END_IF
IF obj% = 20
    ' grille
    grid% = 1 - grid%: GOSUB Ico2Des
    RETURN
END_IF
IF obj% = 19
    ' RAZ
    i% = MESSAGE_CONFIRMATION_YES_NO("Effacer entièrement le dessin")
    IF i% = 1 THEN GOSUB Desima: CAPTION 43, "": ' retour à l'état d'origine
    RETURN
END_IF
IF obj% = 18
    ' Rotation 90°
    GOSUB Rota90
    RETURN
END_IF
on = 0: GOSUB Desoutil
IF out=12
    HIDE 60: HIDE 61: HIDE 62: HIDE 63: HIDE 35: HIDE 36
END_IF
out = obj% - 10
on = 1: GOSUB Desoutil
SELECT out
    CASE 0: CAPTION 40, "Outil Point: Clic le point à colorer"
    CASE 1: CAPTION 40, "Outil Ligne: Clic le point de départ de la ligne"
    CASE 2: CAPTION 40, "Outil Rectangle vide: Clic le 1er coin du rectangle"
    CASE 3: CAPTION 40, "Outil Rectangle plein: Clic le 1er coin du rectangle"
    CASE 4: CAPTION 40, "Outil Cercle vide: Clic le centre du cercle"
    CASE 5: CAPTION 40, "Outil Cercle plein: Clic le centre du cercle"
    CASE 6: CAPTION 40, "Outil Flood: clic un point de la surface à remplir"
    CASE 7: CAPTION 40, "Outil Pipette: Clic une case de la zone dessin"
END_SELECT
RETURN
' *****************************************************************************
Ico2Des:
' recopie de l'icône grandeur nature dans l'espace de dessin
2D_TARGET_IS 1
2D_PEN_COLOR 164,164,164
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 164,164,164
            2D_FILL_COLOR cr,cg,cb
            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
    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 80
FILTER 80, "Fichiers BMP/ICO|*.bmp;*.ico"
f$ = FILE_NAME$(80): DELETE 80: IF f$ = "_" THEN RETURN
CAPTION 43, "Fichier: " + f$
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
cAPTION 43, "Fichier: " + f$ + " (" + STR$(wim) + "x" + STR$(him) + ")"
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 80: FILTER 80, "Fichier BMP/ICO|*.bmp;*.ico"
f$ = FILE_NAME$(80): DELETE 80: IF f$ = "_" THEN RETURN
CAPTION 43, "Fichier: " + f$ + " (" + STR$(ic) + "x" + STR$(ic) + ")"
a$ = UPPER$(RIGHT$(f$, 4))
IF a$ = ".ICO"
    FILE_SAVE 5, ftmp$
    a$ = " /transpcolor=(" + STR$(r(16))+","+STR$(g(16))+","+STR$(b(16))+")"
    EXECUTE_WAIT iv$ + ftmp$ + a$ + " /convert=" + f$: ' conversion bmp -> ico
ELSE
    FILE_SAVE 5, f$
END_IF
RETURN
' *****************************************************************************
Undo:
FILE_LOAD 5, fpr$
GOSUB Ico2Des
at2 = 0
RETURN
' *****************************************************************************
Format:
i% = NUMBER_CLICK
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
' *****************************************************************************
Pic2Dat:
' Copie dans le clipboard de l'image (N/B) sous forme de lignes de datas
HIDE 33
PICTURE 80: TOP 80,95:LEFT 80,10:WIDTH 80,200:HEIGHT 80,32
2D_TARGET_IS 80:2D_FILL_COLOR 255,192,192:2D_PEN_COLOR 255,0,0
2D_PEN_WIDTH 3: 2D_RECTANGLE 0,0,199,31
2D_TARGET_IS 0
SPIN 81: TOP 81,98: LEFT 81,12:WIDTH 81,50:HEIGHT 81,27
SPIN 82: TOP 82,98: LEFT 82,78:WIDTH 82,50:HEIGHT 82,27
POSITION 81, ic: POSITION 82, ic
PRINT_TARGET_IS 80:FONT_BOLD 80: PRINT_LOCATE 56,5: PRINT "X": PRINT_TARGET_IS 0
BUTTON 83: TOP 83,98: LEFT 83,137:WIDTH 83,70:HEIGHT 83,27:CAPTION 83,"OK"
REPEAT
UNTIL MOUSE_LEFT_DOWN(83) = 1
wd% = POSITION(81): hd% = POSITION(82): ' hauteur et largeur à sauvegarder
l$ = ""
FOR y% = 0 TO hd%-1
    FOR x% = 0 TO wd%-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%
        vh$ = RIGHT$("0"+HEX$(v%),2)
        l$ = l$ + vh$
    NEXT x%
NEXT y%
' sauvegarde de l$ sous forme de lignes de datas dans le clipboard
v% = wd%: vh$ = RIGHT$("0"+HEX$(v%),2): b$ = vh$: v% = hd%: vh$ = RIGHT$("0"+HEX$(v%),2)
a$ = "DATA " + CHR$(34) + "?????" + CHR$(34) + ",": ' futur nom d'icône
a$ = a$ + CHR$(34)+b$+vh$+CHR$(34)+CHR$(13)+al$: ' largeur, hauteur
rs:
IF LEN(l$) > 64
    a$ = a$ + "DATA " + CHR$(34) + LEFT$(l$, 64) + CHR$(34) + CHR$(13) + al$
    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" + al$
a$ = a$+"sous forme de lignes de datas en hexadécimal"
MESSAGE a$
DELETE 80: DELETE 81: DELETE 82: DELETE 83: SHOW 33
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%
GOSUB Ico2Des
RETURN
' *****************************************************************************
Decal:
' décalage de la totalité de l'image d'un pixel
i% = NUMBER_CLICK
k% = i% - 24: ' sens de décalage, 0 haut, 1 gauche, 2 droite, 3 bas
FILE_SAVE 5, fpr$
2D_TARGET_IS 5
SELECT k%
    CASE 0: ' décalage vers le haut
        FOR y% = 0 TO ic-2
            FOR x% = 0 TO ic-1
                pr = COLOR_PIXEL_RED(5, x%, y%+1)
                pg = COLOR_PIXEL_GREEN(5, x%, y%+1)
                pb = COLOR_PIXEL_BLUE(5, x%, y%+1)
                2D_PEN_COLOR pr, pg, pb: 2D_POINT x%, y%
            NEXT x%
        NEXT y%
        2D_PEN_COLOR r(16),g(16),b(16)
        FOR x% = 0 TO ic-1: 2D_POINT x%, ic-1: NEXT x%
    CASE 1: ' décalage vers la droite
        FOR x% = 0 TO ic-2
            FOR y% = 0 TO ic-1
                pr = COLOR_PIXEL_RED(5, x%+1, y%)
                pg = COLOR_PIXEL_GREEN(5, x%+1, y%)
                pb = COLOR_PIXEL_BLUE(5, x%+1, y%)
                2D_PEN_COLOR pr, pg, pb: 2D_POINT x%, y%
            NEXT y%
        NEXT x%
        2D_PEN_COLOR r(16),g(16),b(16)
        FOR y% = 0 TO ic-1: 2D_POINT ic-1, y%: NEXT y%
    CASE 2: ' décalage vers la gauche
        FOR x% = ic-1 TO 1 STEP -1
            FOR y% = 0 TO ic-1
                pr = COLOR_PIXEL_RED(5, x%-1, y%)
                pg = COLOR_PIXEL_GREEN(5, x%-1, y%)
                pb = COLOR_PIXEL_BLUE(5, x%-1, y%)
                2D_PEN_COLOR pr, pg, pb: 2D_POINT x%, y%
            NEXT y%
        NEXT x%
        2D_PEN_COLOR r(16),g(16),b(16)
        FOR y% = 0 TO ic-1: 2D_POINT 0, y%: NEXT y%
    CASE 3: ' décalage vers le bas
        FOR y% = ic-1 TO 1 STEP -1
            FOR x% = 0 TO ic-1
                pr = COLOR_PIXEL_RED(5, x%, y%-1)
                pg = COLOR_PIXEL_GREEN(5, x%, y%-1)
                pb = COLOR_PIXEL_BLUE(5, x%, y%-1)
                2D_PEN_COLOR pr, pg, pb: 2D_POINT x%, y%
            NEXT x%
        NEXT y%
        2D_PEN_COLOR r(16),g(16),b(16)
        FOR x% = 0 TO ic-1: 2D_POINT x%, 0: NEXT x%
END_SELECT
GOSUB Ico2Des
RETURN
' ==============================================================================
Sym:
FILE_SAVE 5, fpr$
FOR y% = 0 TO ic-1
    FOR x% = 0 TO ic-1
        pr = COLOR_PIXEL_RED(5, x%, y%)
        pg = COLOR_PIXEL_GREEN(5, x%, y%)
        pb = COLOR_PIXEL_BLUE(5, x%, y%)
        pix(y%,x%) = 65536*pr + 256*pg + pb
    NEXT x%
NEXT y%
2D_TARGET_IS 5
i% = NUMBER_CLICK
IF i% = 28
    ' symétrie verticale
    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%, ic-1-y%
        NEXT x%
    NEXT y%
ELSE
    ' symétrie horizontale
    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 ic-1-x%, y%
        NEXT x%
    NEXT y%
END_IF
GOSUB Ico2Des
RETURN
' *****************************************************************************
Stxt:
IF CLICKED(35) = 1: ' OK
    FILE_SAVE 5, fpr$
    a$ = TEXT$(60): ' texte saisi
    PICTURE 100: TOP 100, yi: LEFT 100, xi: WIDTH 100, ic: HEIGHT 100, ic: HIDE 100
    b$ = "Lucida Console": x% = ITEM_INDEX(63): IF x% <> 0 THEN b$ = ITEM_INDEX$(63)
    PRINT_TARGET_IS 100: FONT_NAME 100, b$: FONT_SIZE 100, POSITION(62)
    FONT_COLOR 100,0,0,0
    PRINT_LOCATE xt%, yt%: PRINT a$
    FOR y% = 0 TO ic-1
        FOR x% = 0 TO ic-1
            pr = COLOR_PIXEL_RED(100, x%, y%)
            pg = COLOR_PIXEL_GREEN(100, x%, y%)
            pb = COLOR_PIXEL_BLUE(100, x%, y%)
            pix(y%,x%) = 65536*pr + 256*pg + pb
        NEXT x%
    NEXT y%
    PRINT_TARGET_IS 0: DELETE 100
    2D_TARGET_IS 5
    FOR y% = 0 TO ic-1
        FOR x% = 0 TO ic-1
            IF pix(y%,x%) < 16777215
                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%
            END_IF
        NEXT x%
    NEXT y%
    GOSUB Ico2Des
ELSE
    ' Annul, ignorer
END_IF
HIDE 60: HIDE 61: HIDE 62: HIDE 63: HIDE 35: HIDE 36
cst% = 0
on = 0: GOSUB Desoutil
out = 0
on = 1: GOSUB Desoutil
CAPTION 40, "Outil Point: Clic le point à colorer"
RETURN
' *****************************************************************************
Teinte:
IF co = 16 THEN RETURN: ' inadmis sur la couleur de transparence
k% = 32: ' pas d'incrémentation de luminosité
i% = NUMBER_CLICK
IF i% = 6
    ccr% = ccr% + k%: IF ccr% > 255 THEN ccr% = 255
    ccg% = ccg% + k%: IF ccg% > 255 THEN ccg% = 255
    ccb% = ccb% + k%: IF ccb% > 255 THEN ccb% = 255
ELSE
    ccr% = ccr% - k%: IF ccr% < 0 THEN ccr% = 0
    ccg% = ccg% - k%: IF ccg% < 0 THEN ccg% = 0
    ccb% = ccb% - k%: IF ccb% < 0 THEN ccb% = 0
END_IF
2D_TARGET_IS 3: 2D_FILL_COLOR ccr%, ccg%, ccb%
2D_RECTANGLE 2, 1, WIDTH(3),HEIGHT(3)
CAPTION 47,"("+STR$(ccr%)+","+STR$(ccg%)+","+STR$(ccb%)+")"
RETURN
' *****************************************************************************
Transpar:
' couleur de transparence
r(16) = POSITION(71): g(16) = POSITION(72): b(16) = POSITION(73)
' CAPTION 9,"("+STR$(r(16))+","+STR$(g(16))+","+STR$(b(16))+")"
RETURN
' ==============================================================================
SUB Dat2Pic(etiq$,obj%,x%,y%)
' Dessin d'une icône Panoramic (N/B) intégrée sous forme de Datas
' Etiq$: nom de l'icône, obj% objet récepteur, dessin en x%,y%
DIM_LOCAL l$,a$,wim%,him%,v%,i%,j%,k%
RESTORE: REPEAT: READ a$: UNTIL a$ = etiq$
READ l$ : wim% = HEX(LEFT$(l$,2)): him% = HEX(RIGHT$(l$,2))
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% = HEX(MID$(l$,i%,1))
        FOR k% = 0 TO 4
            IF BIN_AND(v%,POWER(2,3-k%)) > 0 THEN 2D_POINT x%+i%*4+k%,y%+j%
        NEXT k%
    NEXT i%
NEXT j%
END_SUB
' *****************************************************************************
Aide:
al$ = CHR$(10): ' saut de ligne
a$ = CHR$(9)+CHR$(9)+CHR$(9)+CHR$(9)+"- EDITEUR D'ICONES -" + al$
a$=a$+al$
a$=a$+"Pour création et/ou modification d'icônes simples." + al$
a$=a$+"- Le programme ne propose que 16 couleurs élémentaires." + al$
a$=a$+"- Le programme gère la transparence." + al$
a$=a$+al$
a$=a$+"Deux zones d'images: la zone de dessin agrandie à droite, l'icône grandeur nature"+al$
a$=a$+"en haut à gauche." + al$
a$=a$+"Chaque case à droite représente un pixel de l'icône." + al$
a$=a$+al$
a$=a$+"1) Création d'une icône pour usage général (Windows)" + al$
a$=a$+"- Choisir l'option format: 16x16, 24x24, 32x32, 48x48 ou 64x64" + al$
a$=a$+"- Dessiner l'icône à l'aide des outils fournis en cliquant sur l'outil désiré:"+al$
a$=a$+"  Point, Ligne, Rectangle vide ou plein, Cercle vide ou plein, Remplissage,"+al$
a$=a$+"  Rotation 90° à gauche, Effacement complet du dessin, choix de la couleur 'transparente',"+al$
a$=a$+"  superposition d'une grille repère 8x8 pixels pour aide au dessin."+al$
a$=a$+"  L'outil Texte (T) permet d'insérer quelques caractères dans l'icône, en haut à gauche."+al$
a$=a$+"  On peut choisir la police de caractères, sa taille, et l'emplacement en x et y du texte dans l'icône."+al$
a$=a$+"  Pour positionner le texte avec précision, cliquer sur l'emplacement désiré dans la zone de dessin,"+al$
a$=a$+"  entrer le texte, puis cliquer 'OK'."+al$
a$=a$+"  Les outils flèches dans les 4 directions permettent de décaler l'icône entière d'une ligne ou d'une"+al$
a$=a$+"  rangée dans la direction désirée. Les pixels libérés ainsi deviennent transparents."+al$
a$=a$+al$
a$=a$+"  Il y a possibilité d'un seul retour en arrière (touche 'Undo') en cas d'erreur."+al$
a$=a$+"  Cliquer sur la couleur de tracé désirée (16 couleurs disponibles), ou à l'aide de l'outil"+al$
a$=a$+"  'pipette' sur une des couleurs du dessin."+al$
a$=a$+"  La couleur ainsi choisie devient la couleur active."+al$
a$=a$+"  La couleur active est affichée au-dessus de la palette des couleurs."+al$
a$=a$+"  On peut moduler la couleur choisie en plus clair ou en plus sombre."+al$
a$=a$+"  L'outil actif est surligné en jaune."+al$
a$=a$+"        Pour effacer un point ou une figure: dessiner avec la couleur de fond (transparente),"+al$
a$=a$+"        ou avec une autre couleur (blanc par exemple, ou autre)."+al$
a$=a$+"  La couleur transparente peut se choisir en modifiant les valeurs R,G,B sous la palette de couleurs."+al$
' a$=a$+"  Elle est implicitement le noir pur (0,0,0) conformément à la norme des 'sprites' Panoramic."+al$
a$=a$+"- Sauvegarder l'icône dans un fichier (BMP ou ICO, au choix): clic 'Sauve BMP/ICO'."+al$
a$=a$+al$
a$=a$+"2) Création d'une icône pour usage sous Panoramic, pour agrémenter un programme."+al$
a$=a$+"    (fonction à l'usage des programmeurs: bouton 'Sauve Datas')."+al$
a$=a$+"- Le dessin créé en noir et blanc sera sauvegardé dans le Clipboard sous forme de lignes"+al$
a$=a$+"  de DATAs en hexadécimal pour utilisation ultérieure dans un programme Panoramic."+al$
a$=a$+"  Il suffit de 'Coller' ces lignes de datas dans le nouveau programme, de remplacer"+al$
a$=a$+"  les points d'interrogation en tête par un nom convenu, et d'appeler la SUB Dat2Pic"+al$
a$=a$+"  avec en paramètres le nom attribué à cette icône, le numéro d'objet destinataire (Picture par exemple),"+al$
a$=a$+"  et les coordonnées x et y de l'emplacement désiré dans l'objet."+al$
a$=a$+"  On se contentera du noir et blanc (1 bit par pixel), sinon les datas seraient trop volumineux."+al$
a$=a$+"  Les icônes 'remplissage' et 'pipette' entre autres de ce programme ont été créées ainsi (voir les datas"+al$
a$=a$+"  en tête du programme)."+al$
a$=a$+al$
a$=a$+"Les directives affichée sous la zone de dessin sont fonction de l'outil choisi et de la phase de saisie."+al$
a$=a$+al$
a$=a$+"3) Lecture d'une icône (.ICO, ou petite image carrée au format .BMP)"+al$
a$=a$+"- Touche 'Lire BMP/ICO', ouverture d'une boîte de dialogue pour choisir le fichier."+al$
a$=a$+"ATTENTION: l'icône lue est éventuellement redimensionnée pour s'adapter au format choisi au préalable !"+al$
a$=a$+"  On peut modifier l'icône chargée et la sauvegarder modifiée, au format choisi."+al$
a$=a$+al$
a$=a$+"Les conversions format BMP <-> format ICO (Panoramic ne gère pas le format ico) sont"+al$
a$=a$+"sous-traitées au programme IrfanView, qui doit donc être présent sur le pc."
MESSAGE a$
RETURN
' *****************************************************************************
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Fabrication d'icônes Empty
MessageSujet: Re: Fabrication d'icônes   Fabrication d'icônes EmptyJeu 19 Mar 2015 - 22:19

Bravo. Très bel outil, une fois de plus JL35.
Revenir en haut Aller en bas
 
Fabrication d'icônes
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Fabrication d'images-titres (photos)

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: