Taille d'une icône

patcui Messages postés 53 Date d'inscription mardi 25 décembre 2001 Statut Membre Dernière intervention 20 août 2008 - 2 nov. 2004 à 11:42
patcui Messages postés 53 Date d'inscription mardi 25 décembre 2001 Statut Membre Dernière intervention 20 août 2008 - 2 nov. 2004 à 19:05
Bonjour à tous,

Je possède un grand nombre d'icônes et je souhaitrais les classer. Donc pour cela j'ai besoin de savoir la taille ou les tailles ainsi que le nombre de couleurs contenu dans un fichier icône (.ico).
Est-ce quelqu'un pourrait m'indiquer une solution sous VB6 ou VB .net ?

D'autre part, j'ai un problème sous VB .net qui est le suivant :
Je voudrais connaître la méthode pour changer la propriété Icon d'un formulaire par le biais du code.
Si quelqu'un a une solution, pourrait-il me dire comment faire.

Merci d'avance à ceux ou celles qui répondront à ces questions,

Patrice CUISINAUD
[mailto:cuisina@univ-lyon1.fr cuisina@univ-lyon1.fr]
www.cuisinaud.com

4 réponses

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
2 nov. 2004 à 14:17
faut connaître le format d'un fichier ICO:

rem une entête de 6 octets
Private Type ICONFILEHEADER 'Taille = 6 bytes
idReserved As Integer 'toujours à zéro
idType As Integer '1=icone 2=curseur
idCount As Integer 'nombre d'icones
End Type

rem pour chaque icone:
Private Type ICONDIRECTORYENTRY 'Taille = 16 bytes
bwidth As Byte 'Largeur de l'icone
bheight As Byte 'Hauteur de l'icone
bColorCount As Byte 'nombre de couleurs (2,16,0)
bReserved As Byte 'toujours à zéro
wPlanes As Integer 'nb de plan = 1
wBitCount As Integer 'Nombre de bits (1,4,8,24,32)
dwBytesInRes As Long 'taille icone
dwImageOffset As Long 'adresse de l'icone
End Type

Private Type BITMAPINFOHEADER 'Taille = 40 bytes
biSize As Long 'taille = 40
biwidth As Long 'Largeur
biheight As Long 'Hauteur * 2
biPlanes As Integer 'nb de plan = 1
biBitCount As Integer '1=mono 4=16 couleurs 8=256 couleurs 24=true couleur
biCompression As Long ' = 0
biSizeImage As Long 'taille image (avec masque ?
biXPelsPerMeter As Long ' = 0
biYPelsPerMeter As Long ' = 0
biClrUsed As Long ' = 0
biClrImportant As Long ' = 0
End Type

ensuite on trouve:
- La table de couleurs (si présente)
- le bitmap de l'icone
- Le masque
0
patcui Messages postés 53 Date d'inscription mardi 25 décembre 2001 Statut Membre Dernière intervention 20 août 2008
2 nov. 2004 à 18:15
Bonjour Gobillot,

Merci pour ces renseignements mais pourrais-tu me faire un petit exemple ?

Merci d'avance,

Patrice CUISINAUD
[mailto:cuisina@univ-lyon1.fr cuisina@univ-lyon1.fr]
www.cuisinaud.com
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
2 nov. 2004 à 18:30
Je te mets que le début pour te montrer le principe, parce que c'est un vaste programme ...

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)

Dim Ifh As ICONFILEHEADER
Dim Ide As ICONDIRECTORYENTRY
Dim Bmp As BITMAPINFOHEADER
Dim Temp() As Byte
Dim tmp() As Byte
Dim T1 as Long

Lf = FileLen(NomFichier)

Open NomFichier For Binary As #1
ReDim Temp(Lf-1)
Get #1, , Temp()
Close #1

CopyMemory Ifh, Temp(0), 6
NombreIcones = Ifh.idCount

t1 = 6
CopyMemory Ide, Temp(t1), 16
AdresseIcone = Ide.dwImageOffset
LargeurIcone = Ide.bwidth
HauteurIcone = Ide.bheight

CopyMemory Bmp, Temp(AdresseIcone), 16
0
patcui Messages postés 53 Date d'inscription mardi 25 décembre 2001 Statut Membre Dernière intervention 20 août 2008
2 nov. 2004 à 19:05
Re bonjour Gobillot,

Merci pour ce bout de programme mais il me paraît un peu compliqué.

Est-ce que tu peux m'envoyer par mail ce programme ?
Si oui voici mon adresse cuisina@univ-lyon1.fr

Merci d'avance,

Patrice CUISINAUD
[mailto:cuisina@univ-lyon1.fr cuisina@univ-lyon1.fr]
www.cuisinaud.com
0
Rejoignez-nous