Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Icônes à fond transparent dans Panoramic Dim 30 Mai 2010 - 17:10 | |
| Cela fait un moment que j'essaye d'avoir des icônes à fond transparent pour faire des boutons image sur une barre d'outils. J'avais suggéré la commande TRANSPARENT N pour un picture, mais pour le moment, il n'y a pas de réaction. D'après mes recherches, c'est un attribut direct du canvas d'un image sous Delphi... Alors, j'ai trouvé une façon de contourner le problème. Bon, ce n'est pas très performant, mais ça marche, et comme les boutons sont chargés en début de programme, c'est acceptable. Le principe est le suivant: 1. on constitue des images en format BMP des boutons à utiliser, maxi 32x32 pixels, mais aussi 24x24 ou 16x16. Bien sûr, plus le format est grand, plus c'est lent... 2. avec un éditeur d'images (Paint, Irfanview, Fotofiltre, ...), on utilise la fonction "remplissage" pour remplir les espaces extérieurs avec une couleur n'existant pas dans l'image (noir, blanc, ou n'importe quoi d'autre). L'important, c'est que cette couleur touche le coin en bas à gauche de l'image. 3. on crée un picture uni_colore pour représenter la barre d'outils, et on place autant de petits picture que nécessaire sur cette barre d'outils. 4. puis, pour chaque picture, on lui charge son image BMP et on utilise le sous-programme donné ci-après. Ce sous-programme va redessiner chaque pixel ayant la couleur dite transparente avec la couleur de la barre d'outils. Le résultat est très joli. Voici le code: - Code:
-
label click_40, charger_icone
' On considère que, comme en Delphi et avec les API Windows, ' que le pixel du coin en bas à gauche peut représenter la couleur transparente.
' variable de travail dim i%
' variables du sous-programme dim r%, g%, b%, k%, rt%, gt%, bt% dim n_objet%, n_outil%, i_icone%, j_icone%, icon_size% dim img_file$
' barre d'outils picture 10 top 10,10 left 10,10 width 10,400 height 10,40 color 10,255,255,0
' créer les images pour les boutons de la carre s'outils for i%=1 to 5 picture 20+i% top 20+i%,15 left 20+i%,15+i%*40 width 20+i%,30 height 20+i%,30 stretch_on 20+i% 2D_target_is 20+i% next i%
' bouton pour lancer le chargement des images button 40 top 40,60 left 40,130 caption 40,"charger" on_click 40,click_40
end
' lancement du chargement de simages click_40: for k%=1 to 5 n_objet% = 20+k% : ' image cible n_outil% = 10 : ' image barred'outils icon_size% = 32 : ' taille de l'image d'ORIGINE ! img_file$ = "c:\program files\panoramic editor\open.bmp" : ' fichier image gosub charger_icone next k% return
' sous-programme de service pour le chargement d'une image ' en entrée: ' img_file$ = nom du fichier image ' n_outil% = numéro d'objet de la barre d'outils ' n_objet% = numéro d'objet du bouton (objet picture Panoramic) ' icon_size% = taille de l'image en pixels charger_icone: file_load n_objet%,img_file$ r% = color_pixel_red(n_outil%,width(n_outil%-2),2) : ' prendre la couleur de la barre de commande g% = color_pixel_green(n_outil%,width(n_outil%-2),2) b% = color_pixel_blue(n_outil%,width(n_outil%-2),2) rt% = color_pixel_red(n_objet%,0,icon_size%) : ' prendre la couleur transparente gt% = color_pixel_green(n_objet%,0,icon_size%) bt% = color_pixel_blue(n_objet%,0,icon_size%) 2D_target_is n_objet% 2D_pen_color r%,g%,b% : ' pouvoir dessiner avec cette couleur for i_icone%=0 to icon_size%-1 for j_icone%=0 to icon_size%-1 r% = color_pixel_red(n_objet%,i_icone%,j_icone%) g% = color_pixel_green(n_objet%,i_icone%,j_icone%) b% = color_pixel_blue(n_objet%,i_icone%,j_icone%) if (r%=rt%) and (g%=gt%) and (b%=bt%) : ' si le fond est transparent 2D_point i_icone%,j_icone% : ' alors redessiner le point end_if next j_icone% next i_icone% return
J'ai remarqué que la commande stretch_on produit des effets inattendus. Si le picture pour dessiner le bouton fait 20x20 pixels, ce qui est une bonne taille pour un bouton de barre d'outils, et si l'image d'origine fait 32x32 pixels, il faut utiliser stretch_on avant de charger l'image. Or, à l'intérieur de l'image, ON CONTINUE A TRAVAILLER AVEC LA TAILLE D'ORIGINE, c'est-à-dire 32x32 ! Il faut donc connaître la taille d'origine de l'image dans mon sous-programme pour "chopper" le coin en bas à gauche et pour boucler sur la totalité de l'image ! C'est la raison de l'ajout de la variable icon_size%.
Dernière édition par Klaus le Lun 31 Mai 2010 - 8:37, édité 5 fois | |
|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Icônes à fond transparent dans Panoramic Dim 30 Mai 2010 - 17:33 | |
| | |
|
Invité Invité
| Sujet: Re: Icônes à fond transparent dans Panoramic Lun 31 Mai 2010 - 7:54 | |
| J'ai enfin compris.
Bon travail Par contre tu mets 5 pictures avec un seul nom de fichier, et ça porte à confusion, vu qu'on aura qu'une seule image copiée 5 fois. |
|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Icônes à fond transparent dans Panoramic Lun 31 Mai 2010 - 8:34 | |
| Certes, mais pour la démo, c'est suffisant. Il suffit de mettre chez soi, les noms de fichiers que l'on veut, et de rajouter les on_click sir les picture...
J'ai fait un edit sur le source, car dû certainement à un bug dans Panoramic, après les fonctions color_pixel_xxx retournent "blanc" (255,255,255) quand on le picture à charger se trouve à gauche de la barre d'outils - ca savoir pourquoi... | |
|
Contenu sponsorisé
| Sujet: Re: Icônes à fond transparent dans Panoramic | |
| |
|