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
» Form(résolu)
Affichage d'une icône Emptypar leclode Hier à 17:59

» trop de fichiers en cours
Affichage d'une icône Emptypar Marc Hier à 11:42

» Bataille navale SM
Affichage d'une icône Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Une calculatrice en une ligne de programme
Affichage d'une icône Emptypar jean_debord Ven 26 Avr 2024 - 8:01

» Gestion d'un système client-serveur.
Affichage d'une icône Emptypar Pedro Jeu 25 Avr 2024 - 19:31

» Les maths du crocodile
Affichage d'une icône Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
Affichage d'une icône Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Affichage d'une icône Emptypar Froggy One Mer 24 Avr 2024 - 18:38

» Dessine-moi une galaxie
Affichage d'une icône Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
Affichage d'une icône Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
Affichage d'une icône Emptypar papydall Dim 21 Avr 2024 - 23:30

» 2D_fill_color(résolu)
Affichage d'une icône Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
Affichage d'une icône Emptypar leclode Mer 17 Avr 2024 - 11:07

» on_key_down (résolu)
Affichage d'une icône Emptypar leclode Mar 16 Avr 2024 - 11:01

» Sous-programme(résolu)
Affichage d'une icône Emptypar jjn4 Jeu 4 Avr 2024 - 14:42

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Avril 2024
LunMarMerJeuVenSamDim
1234567
891011121314
15161718192021
22232425262728
2930     
CalendrierCalendrier
Le Deal du moment :
Pokémon EV06 : où acheter le Bundle Lot ...
Voir le deal

 

 Affichage d'une icône

Aller en bas 
3 participants
AuteurMessage
JL35




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

Affichage d'une icône Empty
MessageSujet: Affichage d'une icône   Affichage d'une icône EmptyVen 15 Fév 2019 - 22:47

J'ai essayé (vainement) d'afficher une icône (image format .ICO) dans un Picture, mais je n'ai pas réussi, même en la convertissant (avec une ressource externe, IrfanView par exemple) en bmp ou jpg.

Elle s'affiche, évidemment, mais sans respecter les zones de transparence.
et je n'ai pas réussi à trouver où dans le fichier est la couleur de transparence.
J'ai lu quelque part sur internet que c'est la couleur du 1er pixel en haut à gauche, mais ça ,ne marche pas.
Je pense que ce n'est pas indiqué aussi simplement, et qu'il s'agit de masques qui s'appliquent à toutes les couleurs de l'image.

Heureusement, j'ai fini par utiliser la fonction "LoadAnyImageFile" de KGF.dll (merci encore une fois Klaus) qui copie l'image dans le presse-papier, et il suffit alors de faire un Clipboard_Paste dans le Picture, et l'icône apparaît avec ses zones de transparence qui sont respectées.

Ce qui permet d'afficher une véritable icône dans un programme Panoramic.
Revenir en haut Aller en bas
Klaus

Klaus


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

Affichage d'une icône Empty
MessageSujet: Re: Affichage d'une icône   Affichage d'une icône EmptyVen 15 Fév 2019 - 23:06

Merci, JL35 !

La transparence dans une icône est une affaire très complexe, et ce n'est pas juste 1 seul pixel qui détermine la couleur de transparence. Voici un extrait de la doc (pardon, c'est en anglais...):
Citation :
Icon resource structure

An ICO or CUR file is made up of an ICONDIR ("Icon directory") structure, containing an ICONDIRENTRY structure for each image in the file, followed by a contiguous block of all image bitmap data (which may be in either Windows BMP format, excluding the BITMAPFILEHEADER structure, or in PNG format, stored in its entirety).[3]

Images with less than 32 bits of color depth follow a particular format: the image is encoded as a single image consisting of a color mask (the "XOR mask") together with an opacity mask (the "AND mask").[6][not in citation given] The XOR mask must precede the AND mask inside the bitmap data; if the image is stored in bottom-up order (which it most likely is), the XOR mask would be drawn below the AND mask. The AND mask is 1 bit per pixel, regardless of the color depth specified by the BMP header, and specifies which pixels are fully transparent and which are fully opaque. The XOR mask conforms to the bit depth specified in the BMP header and specifies the numerical color or palette value for each pixel. Together, the AND mask and XOR mask make for a non-transparent image representing an image with 1-bit transparency; they also allow for inversion of the background. The height for the image in the ICONDIRENTRY structure of the ICO/CUR file takes on that of the intended image dimensions (after the masks are composited), whereas the height in the BMP header takes on that of the two mask images combined (before they are composited). Therefore, the masks must each be of the same dimensions, and the height specified in the BMP header must be exactly twice the height specified in the ICONDIRENTRY structure.[citation needed]

32-bit images (including 32-bit BITMAPINFOHEADER-format BMP images[Notes 1]) are specifically a 24-bit image with the addition of an 8-bit channel for alpha compositing. Thus, in 32-bit images, the AND mask is not required, but recommended for consideration. Windows XP and higher will use a 32-bit image in less than True color mode by constructing an AND mask based on the alpha channel (if one does not reside with the image already) if no 24-bit version of the image is supplied in the ICO/CUR file. However, earlier versions of Windows interpret all pixels with 100% opacity unless an AND mask is supplied with the image. Supplying a custom AND mask will also allow for tweaking and hinting by the icon author. Even if the AND mask is not supplied, if the image is in Windows BMP format, the BMP header must still specify a doubled height.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Pedro

Pedro


Nombre de messages : 1549
Date d'inscription : 19/01/2014

Affichage d'une icône Empty
MessageSujet: Affichage d'une icône.   Affichage d'une icône EmptySam 16 Fév 2019 - 9:46

Bonjour.

Et voici la traduction en français, réalisée avec Deepl.

Code:
Un fichier ICO ou CUR est constitué d'une structure ICONDIR ("répertoire d'icônes"), contenant une structure ICONDIRENTRY pour chaque image du fichier, suivie d'un bloc contigu de toutes les données image bitmap (qui peuvent être au format Windows BMP, à l'exclusion de la structure BITMAPFILEHEADER, ou au format PNG, entièrement stockées[3].]

Les images avec moins de 32 bits de profondeur de couleur suivent un format particulier : l'image est codée comme une image unique composée d'un masque de couleur (le "masque XOR") et d'un masque d'opacité (le "masque AND")[6][pas en citation donnée] Le masque XOR doit précéder le masque AND dans les données bitmap ; si l'image est enregistrée dans un ordre ascendant (qui est très probablement), le masque XOR sera dessiné sous le masque AND. Le masque ET est de 1 bit par pixel, quelle que soit la profondeur de couleur spécifiée par l'en-tête BMP, et spécifie quels pixels sont totalement transparents et lesquels sont totalement opaques. Le masque XOR est conforme à la profondeur de bits spécifiée dans l'en-tête BMP et spécifie la couleur numérique ou la valeur de palette pour chaque pixel. Ensemble, le masque ET et le masque XOR forment une image non transparente représentant une image avec une transparence de 1 bit ; ils permettent également l'inversion de l'arrière-plan. La hauteur de l'image dans la structure ICONDIRENTRY du fichier ICONDIRENTRY du fichier ICO/CUR prend celle des dimensions d'image prévues (après la composition des masques), tandis que la hauteur dans l'en-tête BMP prend celle des deux images de masque combinées (avant la composition). Par conséquent, les masques doivent avoir les mêmes dimensions et la hauteur spécifiée dans l'en-tête BMP doit être exactement le double de la hauteur spécifiée dans la structure ICONDIRENTRY[citation nécessaire].

Les images 32 bits (y compris les images BMP au format BITMAPINFOHEADER de 32 bits[Notes 1]) sont spécifiquement une image 24 bits avec l'ajout d'un canal 8 bits pour le compositing alpha. Ainsi, dans les images 32 bits, le masque ET n'est pas nécessaire, mais il est recommandé de le prendre en compte. Windows XP et supérieur utilisera une image 32 bits en mode couleurs inférieures à la couleur réelle en construisant un masque ET basé sur le canal alpha (si on ne réside pas déjà avec l'image) si aucune version 24 bits de l'image n'est fournie dans le fichier ICO/CUR. Cependant, les versions antérieures de Windows interprètent tous les pixels avec une opacité de 100 % à moins qu'un masque ET ne soit fourni avec l'image. La fourniture d'un masque ET personnalisé permettra également à l'auteur de l'icône d'apporter des modifications et de faire des allusions. Même si le masque ET n'est pas fourni, si l'image est au format Windows BMP, l'en-tête BMP doit toujours spécifier une hauteur doublée.
Revenir en haut Aller en bas
JL35




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

Affichage d'une icône Empty
MessageSujet: Re: Affichage d'une icône   Affichage d'une icône EmptySam 16 Fév 2019 - 10:27

Merci mes amis pour ces explications, Klaus pour l'original et Pedro pour la traduction.
(Un bravo particulier pour Pedro, pour la traduction, qui est très fluide et de lecture agréable, pour la forme en tout cas !).

Je me doutais bien que ce n'étais pas aussi simple (mais pas que c'était aussi compliqué !).
J'ai retrouvé dans mes archives une sub que j'avais faite pour faire un dump d'un fichier ico, et on voit bien que les couleurs des pixels sont gérées par des zones bitmap AND et XOR.
Donc bien trop compliqué pour l'usage que je veux en faire (simplement l'affichage), et grâce à KGF.dll mon problème est résolu.

Voici la sub, si ça peut intéresser quelqu'un:
Code:
DIM fi$
fi$ = "C:\GRAPH\ICONES\32x32\Animaux\Animal_02.ico"
HEIGHT 0,1000
LIST 1: FULL_SPACE 1
Dumpico(fi$,1)
END
'====================================
SUB Dumpico(fi$,ls%)
  ' Dump d'un fichier fi$ .ICO, affichage dans le LIST ls%
  IF LABEL("Dp") = 0 THEN LABEL Dp
  DIM_LOCAL sz%,wi%,hi%,nc%,ad%,aa%,lg%,ll%,a$,i%,j%
  FILEBIN_OPEN_READ 1,fi$: sz% = FILEBIN_SIZE(1): message str$(sz%)
  DIM_LOCAL v%(2*sz%)
      FILEBIN_BLOCK_READ 1,sz%,v%(0)
  FILEBIN_CLOSE 1
  IF v%(4) > 1 THEN EXIT_SUB: ' plus d'une icône, abandon
  wi% = v%(6): hi% = v%(7): nc% = v%(8): ' largeur, hauteur, nb de couleurs
  IF nc% = 0 THEN nc% = 256
  ITEM_ADD ls%,"***** "+fi$+" "+STR$(wi%)+"x"+STR$(hi%)+" "+STR$(sz%)+" octets."
  ad% = 0: lg% = 6: GOSUB Dp
  ITEM_ADD ls%,"      - Entries: -"
  ad% = 6: lg% = 16: GOSUB Dp
  ITEM_ADD ls%,"      - InfoHeader: -"
  ad% = 22: lg% = 40: GOSUB Dp
  ITEM_ADD ls%,"      - Colors: -"
  ad% = 62: lg% = nc%*4: GOSUB Dp
  ITEM_ADD ls%,"      - XOR Bitmap: -"
  ad% = ad%+lg%: lg% = nc%*4: GOSUB Dp
  ITEM_ADD ls%,"      - AND Bitmap: -"
  ad% = ad%+lg%: lg% = wi%*hi%: GOSUB Dp
  ITEM_ADD ls%,"      - Reste (?): -"
  ad% = ad%+lg%: lg% = sz%-ad%: GOSUB Dp
  EXIT_SUB
Dp:
  aa% = ad%: ll% = lg%
  IF lg%>16
      FOR j% = 1 TO INT(lg%/16)
          a$ = HEX$(ad%): a$ = RIGHT$("000"+HEX$(ad%),4)+":"
          FOR i% = ad% TO ad%+15
              a$ = a$+" "+RIGHT$("0"+HEX$(v%(i%)),2)
          NEXT i%
          ITEM_ADD ls%,a$
          ad% = ad%+16
      NEXT j%
      lg% = lg%-16*INT(lg%/16)
  END_IF
  a$ = HEX$(ad%): a$ = RIGHT$("000"+HEX$(ad%),4)+":"
  FOR i% = ad% TO ad%+lg%-1
      a$ = a$+" "+RIGHT$("0"+HEX$(v%(i%)),2)
  NEXT i%
  ITEM_ADD ls%,a$
  ad% = aa%: lg% = ll%: ' restore
RETURN
END_SUB
ce qui donne (le début):
Affichage d'une icône Dump10
Revenir en haut Aller en bas
Contenu sponsorisé





Affichage d'une icône Empty
MessageSujet: Re: Affichage d'une icône   Affichage d'une icône Empty

Revenir en haut Aller en bas
 
Affichage d'une icône
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Affichage d'une icône
» Icône sur la fenêtre autre que l'icône Panoramic
» Icone
» Icône de Webdav
» Icone personnalisable

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Présentation et bavardage-
Sauter vers: