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
» Logiciel de planétarium.
Editeur d'icônes - Page 2 Emptypar Pedro Aujourd'hui à 10:37

» Un autre pense-bête...
Editeur d'icônes - Page 2 Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Editeur d'icônes - Page 2 Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Editeur d'icônes - Page 2 Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Editeur d'icônes - Page 2 Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Editeur d'icônes - Page 2 Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Editeur d'icônes - Page 2 Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Editeur d'icônes - Page 2 Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Editeur d'icônes - Page 2 Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Editeur d'icônes - Page 2 Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Editeur d'icônes - Page 2 Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Editeur d'icônes - Page 2 Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Editeur d'icônes - Page 2 Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Editeur d'icônes - Page 2 Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Editeur d'icônes - Page 2 Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le Deal du moment : -17%
(Black Friday) Apple watch Apple SE GPS + Cellular ...
Voir le deal
249 €

 

 Editeur d'icônes

Aller en bas 
+2
Klaus
JL35
6 participants
Aller à la page : Précédent  1, 2, 3, 4, 5  Suivant
AuteurMessage
Jean Claude

Jean Claude


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

Editeur d'icônes - Page 2 Empty
MessageSujet: Re: Editeur d'icônes   Editeur d'icônes - Page 2 EmptyVen 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.

bounce pirat
Revenir en haut Aller en bas
JL35




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

Editeur d'icônes - Page 2 Empty
MessageSujet: Re: Editeur d'icônes   Editeur d'icônes - Page 2 EmptyVen 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.
Revenir en haut Aller en bas
Jean Claude

Jean Claude


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

Editeur d'icônes - Page 2 Empty
MessageSujet: Re: Editeur d'icônes   Editeur d'icônes - Page 2 EmptyVen 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+
Revenir en haut Aller en bas
JL35




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

Editeur d'icônes - Page 2 Empty
MessageSujet: Re: Editeur d'icônes   Editeur d'icônes - Page 2 EmptyVen 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).
Editeur d'icônes - Page 2 Rotations
- 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.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Editeur d'icônes - Page 2 Empty
MessageSujet: Re: Editeur d'icônes   Editeur d'icônes - Page 2 EmptyVen 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 !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
JL35




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

Editeur d'icônes - Page 2 Empty
MessageSujet: Re: Editeur d'icônes   Editeur d'icônes - Page 2 EmptyVen 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.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Editeur d'icônes - Page 2 Empty
MessageSujet: Re: Editeur d'icônes   Editeur d'icônes - Page 2 EmptyVen 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 !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
JL35




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

Editeur d'icônes - Page 2 Empty
MessageSujet: Re: Editeur d'icônes   Editeur d'icônes - Page 2 EmptyVen 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.
Revenir en haut Aller en bas
Invité
Invité




Editeur d'icônes - Page 2 Empty
MessageSujet: Re: Editeur d'icônes   Editeur d'icônes - Page 2 EmptySam 24 Juil 2010 - 0:07

Ne vous moquez pas de moi, voici un teste:
photo fond d'image:
Editeur d'icônes - Page 2 Cran
photo icone:
Editeur d'icônes - Page 2 Rougey

résultat:
Editeur d'icônes - Page 2 Insertion

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
Revenir en haut Aller en bas
JL35




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

Editeur d'icônes - Page 2 Empty
MessageSujet: Re: Editeur d'icônes   Editeur d'icônes - Page 2 EmptySam 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 Sleep
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Editeur d'icônes - Page 2 Empty
MessageSujet: Re: Editeur d'icônes   Editeur d'icônes - Page 2 EmptySam 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
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jean Claude

Jean Claude


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

Editeur d'icônes - Page 2 Empty
MessageSujet: Re: Editeur d'icônes   Editeur d'icônes - Page 2 EmptySam 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
Revenir en haut Aller en bas
JL35




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

Editeur d'icônes - Page 2 Empty
MessageSujet: Re: Editeur d'icônes   Editeur d'icônes - Page 2 EmptySam 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.
Revenir en haut Aller en bas
JL35




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

Editeur d'icônes - Page 2 Empty
MessageSujet: Re: Editeur d'icônes   Editeur d'icônes - Page 2 EmptySam 24 Juil 2010 - 9:38

Salut Jean-Claude, on s'est croisés Very Happy
Revenir en haut Aller en bas
Jean Claude

Jean Claude


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

Editeur d'icônes - Page 2 Empty
MessageSujet: Re: Editeur d'icônes   Editeur d'icônes - Page 2 EmptySam 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.

Very Happy sunny Very Happy
Revenir en haut Aller en bas
JL35




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

Editeur d'icônes - Page 2 Empty
MessageSujet: Re: Editeur d'icônes   Editeur d'icônes - Page 2 EmptySam 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'
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Editeur d'icônes - Page 2 Empty
MessageSujet: Re: Editeur d'icônes   Editeur d'icônes - Page 2 EmptySam 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.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Editeur d'icônes - Page 2 Empty
MessageSujet: Re: Editeur d'icônes   Editeur d'icônes - Page 2 EmptySam 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.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Jean Claude

Jean Claude


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

Editeur d'icônes - Page 2 Empty
MessageSujet: Re: Editeur d'icônes   Editeur d'icônes - Page 2 EmptySam 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...)
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Editeur d'icônes - Page 2 Empty
MessageSujet: Re: Editeur d'icônes   Editeur d'icônes - Page 2 EmptySam 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 ?
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
JL35




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

Editeur d'icônes - Page 2 Empty
MessageSujet: Re: Editeur d'icônes   Editeur d'icônes - Page 2 EmptySam 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) Very Happy
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Editeur d'icônes - Page 2 Empty
MessageSujet: Re: Editeur d'icônes   Editeur d'icônes - Page 2 EmptySam 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
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
JL35




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

Editeur d'icônes - Page 2 Empty
MessageSujet: Re: Editeur d'icônes   Editeur d'icônes - Page 2 EmptySam 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.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Editeur d'icônes - Page 2 Empty
MessageSujet: Re: Editeur d'icônes   Editeur d'icônes - Page 2 EmptySam 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.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
JL35




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

Editeur d'icônes - Page 2 Empty
MessageSujet: Re: Editeur d'icônes   Editeur d'icônes - Page 2 EmptySam 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
Revenir en haut Aller en bas
Contenu sponsorisé





Editeur d'icônes - Page 2 Empty
MessageSujet: Re: Editeur d'icônes   Editeur d'icônes - Page 2 Empty

Revenir en haut Aller en bas
 
Editeur d'icônes
Revenir en haut 
Page 2 sur 5Aller à la page : Précédent  1, 2, 3, 4, 5  Suivant
 Sujets similaires
-
» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
» Editeur EliP 5 : Tiny éditeur Panoramic
» Editeur de map
» Editeur avec marquage syntaxique
» Le site internet de GPP

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: