Modifier les pixel d'une image de bouton de barre d'outils
8 réponses
Papyjac
Bonjour,
Je remercie Isabelle qui m'a permet d'arriver jusqu'à, mais je bute encore
Je crée le code suivant après avoir trouver plusieurs exemples similaires
sous Visual Basic
Public Declare Function GetPixel Lib "GDI32.DLL" (ByVal hDC As Long, ByVal
XPos As Long, ByVal nYPos As Long) As Long
Sub Test()
'_Afficher les pixels
Dim U_Objet1 As IPictureDisp ' Objet image
Dim X As Long
Dim Y As Long
'-
Set U_Objet1 = stdole.StdFunctions.LoadPicture("C:\Test.bmp")
With U_Objet1
For X = 0 To .Height - 1
For Y = 0 To .Width - 1
If Y < 256 Then
Cells(X + 1, Y + 1) = GetPixel(.Handle, X, Y)
End If
Next
Next
End With
End Sub
Il s'agit d'une fonction de test
A ce stade, la fonction Getpixel renvoie toujours -1, je suppose qu'il
s'agit de FAUX
dès que je trouverais un résultat, je souhaite modifier la bitmap avec
Setpixel avant de l'afficher dans le bouton avec l'instruction .picture =
U_Objet
Je pense que j'ai un problème d'unité PIXEL ou POINTS ou millimettre !?
Peut-être faut il effectuer une conversion de la Bitmap ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Geo
Bonjour
A ce stade, la fonction Getpixel renvoie toujours -1, je suppose qu'il s'agit de FAUX
Normalement : non, c'est une couleur, donc un nombre combinant l'amplitude des trois composantes. Or la valeur maximale dans un nombre est interprétée comme -1 (technique du complément à 2 pour représenter les nombres négatifs), donc je dirai plutôt : couleur blanche. Faudrait essayer avec un bouton de couleur.
Je pense que j'ai un problème d'unité PIXEL ou POINTS ou millimettre !?
A priori : non, ce sont bien des pixels.
-- A+
Bonjour
A ce stade, la fonction Getpixel renvoie toujours -1, je suppose qu'il
s'agit de FAUX
Normalement : non, c'est une couleur, donc un nombre combinant
l'amplitude des trois composantes.
Or la valeur maximale dans un nombre est interprétée comme -1
(technique du complément à 2 pour représenter les nombres négatifs),
donc je dirai plutôt : couleur blanche.
Faudrait essayer avec un bouton de couleur.
Je pense que j'ai un problème d'unité PIXEL ou POINTS ou millimettre !?
A ce stade, la fonction Getpixel renvoie toujours -1, je suppose qu'il s'agit de FAUX
Normalement : non, c'est une couleur, donc un nombre combinant l'amplitude des trois composantes. Or la valeur maximale dans un nombre est interprétée comme -1 (technique du complément à 2 pour représenter les nombres négatifs), donc je dirai plutôt : couleur blanche. Faudrait essayer avec un bouton de couleur.
Je pense que j'ai un problème d'unité PIXEL ou POINTS ou millimettre !?
A priori : non, ce sont bien des pixels.
-- A+
Papyjac
Bonjour Geo
Et merci d'étudier mon problème
J'ai scanné les propriétés de l'objet IPictureDisp (U_Objet1 dans l'exemple ci-dessous) 1. j'ai bien accès au Handle => Il évolue à chaque exécution 2. Width = Height = 423 3. Type = 1 4. HPal = 0
Ce qui est curieux c'est que quand j'utilise une fonction GetObjectAPI, il me trouve bien Width = Height = 16 ce qui est normal puisque que je travaille sur la bitmap d'une image de bouton 16 x 16 C'est le 423 qui m'inquiète un peu. Mais comme je ne sais s'il faut que j'utilise CreateBitmap, BitBlt... etc je nage dans le brouillard
Public Declare Function GetPixel Lib "GDI32.DLL" (ByVal hDC As Long, ByVal XPos As Long, ByVal nYPos As Long) As Long
Sub Test() '_Afficher les pixels Dim U_Objet1 As IPictureDisp ' Objet image Dim X As Long Dim Y As Long '- Set U_Objet1 = stdole.StdFunctions.LoadPicture("C:Test.bmp") With U_Objet1 For X = 0 To .Height - 1 For Y = 0 To .Width - 1 If Y < 256 Then Cells(X + 1, Y + 1) = GetPixel(.Handle, X, Y) End If Next Next End With End Sub
-- Papyjac
"Geo" a écrit :
Bonjour
> A ce stade, la fonction Getpixel renvoie toujours -1, je suppose qu'il > s'agit de FAUX
Normalement : non, c'est une couleur, donc un nombre combinant l'amplitude des trois composantes. Or la valeur maximale dans un nombre est interprétée comme -1 (technique du complément à 2 pour représenter les nombres négatifs), donc je dirai plutôt : couleur blanche. Faudrait essayer avec un bouton de couleur.
> Je pense que j'ai un problème d'unité PIXEL ou POINTS ou millimettre !?
A priori : non, ce sont bien des pixels.
-- A+
Bonjour Geo
Et merci d'étudier mon problème
J'ai scanné les propriétés de l'objet IPictureDisp (U_Objet1 dans l'exemple
ci-dessous)
1. j'ai bien accès au Handle => Il évolue à chaque exécution
2. Width = Height = 423
3. Type = 1
4. HPal = 0
Ce qui est curieux c'est que quand j'utilise une fonction GetObjectAPI, il
me trouve bien Width = Height = 16 ce qui est normal puisque que je travaille
sur la bitmap d'une image de bouton 16 x 16
C'est le 423 qui m'inquiète un peu.
Mais comme je ne sais s'il faut que j'utilise CreateBitmap, BitBlt... etc je
nage dans le brouillard
Public Declare Function GetPixel Lib "GDI32.DLL" (ByVal hDC As Long, ByVal
XPos As Long, ByVal nYPos As Long) As Long
Sub Test()
'_Afficher les pixels
Dim U_Objet1 As IPictureDisp ' Objet image
Dim X As Long
Dim Y As Long
'-
Set U_Objet1 = stdole.StdFunctions.LoadPicture("C:Test.bmp")
With U_Objet1
For X = 0 To .Height - 1
For Y = 0 To .Width - 1
If Y < 256 Then
Cells(X + 1, Y + 1) = GetPixel(.Handle, X, Y)
End If
Next
Next
End With
End Sub
--
Papyjac
"Geo" a écrit :
Bonjour
> A ce stade, la fonction Getpixel renvoie toujours -1, je suppose qu'il
> s'agit de FAUX
Normalement : non, c'est une couleur, donc un nombre combinant
l'amplitude des trois composantes.
Or la valeur maximale dans un nombre est interprétée comme -1
(technique du complément à 2 pour représenter les nombres négatifs),
donc je dirai plutôt : couleur blanche.
Faudrait essayer avec un bouton de couleur.
> Je pense que j'ai un problème d'unité PIXEL ou POINTS ou millimettre !?
J'ai scanné les propriétés de l'objet IPictureDisp (U_Objet1 dans l'exemple ci-dessous) 1. j'ai bien accès au Handle => Il évolue à chaque exécution 2. Width = Height = 423 3. Type = 1 4. HPal = 0
Ce qui est curieux c'est que quand j'utilise une fonction GetObjectAPI, il me trouve bien Width = Height = 16 ce qui est normal puisque que je travaille sur la bitmap d'une image de bouton 16 x 16 C'est le 423 qui m'inquiète un peu. Mais comme je ne sais s'il faut que j'utilise CreateBitmap, BitBlt... etc je nage dans le brouillard
Public Declare Function GetPixel Lib "GDI32.DLL" (ByVal hDC As Long, ByVal XPos As Long, ByVal nYPos As Long) As Long
Sub Test() '_Afficher les pixels Dim U_Objet1 As IPictureDisp ' Objet image Dim X As Long Dim Y As Long '- Set U_Objet1 = stdole.StdFunctions.LoadPicture("C:Test.bmp") With U_Objet1 For X = 0 To .Height - 1 For Y = 0 To .Width - 1 If Y < 256 Then Cells(X + 1, Y + 1) = GetPixel(.Handle, X, Y) End If Next Next End With End Sub
-- Papyjac
"Geo" a écrit :
Bonjour
> A ce stade, la fonction Getpixel renvoie toujours -1, je suppose qu'il > s'agit de FAUX
Normalement : non, c'est une couleur, donc un nombre combinant l'amplitude des trois composantes. Or la valeur maximale dans un nombre est interprétée comme -1 (technique du complément à 2 pour représenter les nombres négatifs), donc je dirai plutôt : couleur blanche. Faudrait essayer avec un bouton de couleur.
> Je pense que j'ai un problème d'unité PIXEL ou POINTS ou millimettre !?
A priori : non, ce sont bien des pixels.
-- A+
Geo
Bonjour
J'ai scanné les propriétés de l'objet IPictureDisp (U_Objet1 dans l'exemple ci-dessous) 1. j'ai bien accès au Handle => Il évolue à chaque exécution
exact
2. Width = Height = 423 3. Type = 1 4. HPal = 0
Ce qui est curieux c'est que quand j'utilise une fonction GetObjectAPI, il me trouve bien Width = Height = 16 ce qui est normal puisque que je travaille sur la bitmap d'une image de bouton 16 x 16 C'est le 423 qui m'inquiète un peu.
C'est vrai que je n'ai pas vérifié les tailles, mais le résultat est toujours -1, j'ai essayé avec des x et y négatifs, avec "pas d'image", c'est à dire le handler à 0, toujours pareil.
je finis par me demander si cette fonction marche encore. Vous avez essayé de mettre l'image sur votre bouton, telle quelle avec loadpicture ?
-- A+
Bonjour
J'ai scanné les propriétés de l'objet IPictureDisp (U_Objet1 dans l'exemple
ci-dessous)
1. j'ai bien accès au Handle => Il évolue à chaque exécution
exact
2. Width = Height = 423
3. Type = 1
4. HPal = 0
Ce qui est curieux c'est que quand j'utilise une fonction GetObjectAPI, il
me trouve bien Width = Height = 16 ce qui est normal puisque que je travaille
sur la bitmap d'une image de bouton 16 x 16
C'est le 423 qui m'inquiète un peu.
C'est vrai que je n'ai pas vérifié les tailles, mais le résultat est
toujours -1, j'ai essayé avec des x et y négatifs, avec "pas d'image",
c'est à dire le handler à 0, toujours pareil.
je finis par me demander si cette fonction marche encore.
Vous avez essayé de mettre l'image sur votre bouton, telle quelle avec
loadpicture ?
J'ai scanné les propriétés de l'objet IPictureDisp (U_Objet1 dans l'exemple ci-dessous) 1. j'ai bien accès au Handle => Il évolue à chaque exécution
exact
2. Width = Height = 423 3. Type = 1 4. HPal = 0
Ce qui est curieux c'est que quand j'utilise une fonction GetObjectAPI, il me trouve bien Width = Height = 16 ce qui est normal puisque que je travaille sur la bitmap d'une image de bouton 16 x 16 C'est le 423 qui m'inquiète un peu.
C'est vrai que je n'ai pas vérifié les tailles, mais le résultat est toujours -1, j'ai essayé avec des x et y négatifs, avec "pas d'image", c'est à dire le handler à 0, toujours pareil.
je finis par me demander si cette fonction marche encore. Vous avez essayé de mettre l'image sur votre bouton, telle quelle avec loadpicture ?
-- A+
Geo
Bonjour
2. Width = Height = 423
Ce qui fait un rapport de 26,44, pour mon image j'ai 26,46 sur les deux dimensions qui ne sont pas égales. Le type indiqué est HiMetric qui correspondrait à 0,01 mm. De toutes manières, j'ai fait tourner le programme sur 12700 x 16933 sans jamais avoir autre chose que -1.
Avec la nuit qui tombe en plus du brouillard, c'est sur qu'on n'y voit goutte.
-- A+
Bonjour
2. Width = Height = 423
Ce qui fait un rapport de 26,44, pour mon image j'ai 26,46 sur les deux
dimensions qui ne sont pas égales.
Le type indiqué est HiMetric qui correspondrait à 0,01 mm.
De toutes manières, j'ai fait tourner le programme sur 12700 x 16933
sans jamais avoir autre chose que -1.
Avec la nuit qui tombe en plus du brouillard, c'est sur qu'on n'y voit
goutte.
Ce qui fait un rapport de 26,44, pour mon image j'ai 26,46 sur les deux dimensions qui ne sont pas égales. Le type indiqué est HiMetric qui correspondrait à 0,01 mm. De toutes manières, j'ai fait tourner le programme sur 12700 x 16933 sans jamais avoir autre chose que -1.
Avec la nuit qui tombe en plus du brouillard, c'est sur qu'on n'y voit goutte.
-- A+
Papyjac
Bonjour Geo et merci
Oui, l'image se charge très dans le bouton sans problème. Mon test contient ce scénario. car je progresse toujours pas à pas : du monde connu vers l'inconnu et faisant varier peu de chose à chaque fois.
Je fabrique les images sous Paint et les charge sans problème
Je cherche avec mon test en cours à maitrixer les pixel par programme (j'ai plusieurs exemples en VB qui le faisait, par exemple pour pivoter l'image) Pour l'instant, ma quête consistera à fusionner 2 images (masque) encore faut-il que je puisse lire les Pixel (GETPIXEL) et les modifier (SETPIXEL) ou d'autre instructions aussi pratique
-- Papyjac
"Geo" a écrit :
Bonjour
> J'ai scanné les propriétés de l'objet IPictureDisp (U_Objet1 dans l'exemple > ci-dessous) > 1. j'ai bien accès au Handle => Il évolue à chaque exécution
exact
> 2. Width = Height = 423 > 3. Type = 1 > 4. HPal = 0 > > Ce qui est curieux c'est que quand j'utilise une fonction GetObjectAPI, il > me trouve bien Width = Height = 16 ce qui est normal puisque que je travaille > sur la bitmap d'une image de bouton 16 x 16 > C'est le 423 qui m'inquiète un peu.
C'est vrai que je n'ai pas vérifié les tailles, mais le résultat est toujours -1, j'ai essayé avec des x et y négatifs, avec "pas d'image", c'est à dire le handler à 0, toujours pareil.
je finis par me demander si cette fonction marche encore. Vous avez essayé de mettre l'image sur votre bouton, telle quelle avec loadpicture ?
-- A+
Bonjour Geo et merci
Oui, l'image se charge très dans le bouton sans problème. Mon test contient
ce scénario. car je progresse toujours pas à pas : du monde connu vers
l'inconnu et faisant varier peu de chose à chaque fois.
Je fabrique les images sous Paint et les charge sans problème
Je cherche avec mon test en cours à maitrixer les pixel par programme (j'ai
plusieurs exemples en VB qui le faisait, par exemple pour pivoter l'image)
Pour l'instant, ma quête consistera à fusionner 2 images (masque) encore
faut-il que je puisse lire les Pixel (GETPIXEL) et les modifier (SETPIXEL) ou
d'autre instructions aussi pratique
--
Papyjac
"Geo" a écrit :
Bonjour
> J'ai scanné les propriétés de l'objet IPictureDisp (U_Objet1 dans l'exemple
> ci-dessous)
> 1. j'ai bien accès au Handle => Il évolue à chaque exécution
exact
> 2. Width = Height = 423
> 3. Type = 1
> 4. HPal = 0
>
> Ce qui est curieux c'est que quand j'utilise une fonction GetObjectAPI, il
> me trouve bien Width = Height = 16 ce qui est normal puisque que je travaille
> sur la bitmap d'une image de bouton 16 x 16
> C'est le 423 qui m'inquiète un peu.
C'est vrai que je n'ai pas vérifié les tailles, mais le résultat est
toujours -1, j'ai essayé avec des x et y négatifs, avec "pas d'image",
c'est à dire le handler à 0, toujours pareil.
je finis par me demander si cette fonction marche encore.
Vous avez essayé de mettre l'image sur votre bouton, telle quelle avec
loadpicture ?
Oui, l'image se charge très dans le bouton sans problème. Mon test contient ce scénario. car je progresse toujours pas à pas : du monde connu vers l'inconnu et faisant varier peu de chose à chaque fois.
Je fabrique les images sous Paint et les charge sans problème
Je cherche avec mon test en cours à maitrixer les pixel par programme (j'ai plusieurs exemples en VB qui le faisait, par exemple pour pivoter l'image) Pour l'instant, ma quête consistera à fusionner 2 images (masque) encore faut-il que je puisse lire les Pixel (GETPIXEL) et les modifier (SETPIXEL) ou d'autre instructions aussi pratique
-- Papyjac
"Geo" a écrit :
Bonjour
> J'ai scanné les propriétés de l'objet IPictureDisp (U_Objet1 dans l'exemple > ci-dessous) > 1. j'ai bien accès au Handle => Il évolue à chaque exécution
exact
> 2. Width = Height = 423 > 3. Type = 1 > 4. HPal = 0 > > Ce qui est curieux c'est que quand j'utilise une fonction GetObjectAPI, il > me trouve bien Width = Height = 16 ce qui est normal puisque que je travaille > sur la bitmap d'une image de bouton 16 x 16 > C'est le 423 qui m'inquiète un peu.
C'est vrai que je n'ai pas vérifié les tailles, mais le résultat est toujours -1, j'ai essayé avec des x et y négatifs, avec "pas d'image", c'est à dire le handler à 0, toujours pareil.
je finis par me demander si cette fonction marche encore. Vous avez essayé de mettre l'image sur votre bouton, telle quelle avec loadpicture ?
-- A+
Geo
Re
Le seul truc que j'ai obtenu c'est la conversion des tailles : larg = CentimetersToPoints(.Width) * 4 / 3000 haut = CentimetersToPoints(.Height) * 4 / 3000
Rien de mieux pour le reste. J'avais fait un peu de traitement d'images mais avec visual studio qui évolue kui, contrairement au vba. Encore que pour dessiner il vaut mieux encore le faire avec vb6.
-- A+
Re
Le seul truc que j'ai obtenu c'est la conversion des tailles :
larg = CentimetersToPoints(.Width) * 4 / 3000
haut = CentimetersToPoints(.Height) * 4 / 3000
Rien de mieux pour le reste.
J'avais fait un peu de traitement d'images mais avec visual studio qui
évolue kui, contrairement au vba.
Encore que pour dessiner il vaut mieux encore le faire avec vb6.
Le seul truc que j'ai obtenu c'est la conversion des tailles : larg = CentimetersToPoints(.Width) * 4 / 3000 haut = CentimetersToPoints(.Height) * 4 / 3000
Rien de mieux pour le reste. J'avais fait un peu de traitement d'images mais avec visual studio qui évolue kui, contrairement au vba. Encore que pour dessiner il vaut mieux encore le faire avec vb6.
-- A+
Papyjac
BOnjour Geo
Et merci pour tes recherches
Je vais explorer une autre piste : créer l'image de toutes pièces sans la récupérer par loadPicture d'un fichier.bmp
Je ne risque rien d'essayer -- Papyjac
"Geo" a écrit :
Bonjour
> 2. Width = Height = 423
Ce qui fait un rapport de 26,44, pour mon image j'ai 26,46 sur les deux dimensions qui ne sont pas égales. Le type indiqué est HiMetric qui correspondrait à 0,01 mm. De toutes manières, j'ai fait tourner le programme sur 12700 x 16933 sans jamais avoir autre chose que -1.
Avec la nuit qui tombe en plus du brouillard, c'est sur qu'on n'y voit goutte.
-- A+
BOnjour Geo
Et merci pour tes recherches
Je vais explorer une autre piste : créer l'image de toutes pièces sans la
récupérer par loadPicture d'un fichier.bmp
Je ne risque rien d'essayer
--
Papyjac
"Geo" a écrit :
Bonjour
> 2. Width = Height = 423
Ce qui fait un rapport de 26,44, pour mon image j'ai 26,46 sur les deux
dimensions qui ne sont pas égales.
Le type indiqué est HiMetric qui correspondrait à 0,01 mm.
De toutes manières, j'ai fait tourner le programme sur 12700 x 16933
sans jamais avoir autre chose que -1.
Avec la nuit qui tombe en plus du brouillard, c'est sur qu'on n'y voit
goutte.
Je vais explorer une autre piste : créer l'image de toutes pièces sans la récupérer par loadPicture d'un fichier.bmp
Je ne risque rien d'essayer -- Papyjac
"Geo" a écrit :
Bonjour
> 2. Width = Height = 423
Ce qui fait un rapport de 26,44, pour mon image j'ai 26,46 sur les deux dimensions qui ne sont pas égales. Le type indiqué est HiMetric qui correspondrait à 0,01 mm. De toutes manières, j'ai fait tourner le programme sur 12700 x 16933 sans jamais avoir autre chose que -1.
Avec la nuit qui tombe en plus du brouillard, c'est sur qu'on n'y voit goutte.
-- A+
Papyjac
Bonjour Geo,
Oui j'ai mesuré la taille du bouton sur l'écran, il fait environ 4 mm soit 400 Himetric comme du dis
Peut être ai-je compris quelque chose ce soir !
Bonne nuit
-- Papyjac
"Geo" a écrit :
Bonjour
> 2. Width = Height = 423
Ce qui fait un rapport de 26,44, pour mon image j'ai 26,46 sur les deux dimensions qui ne sont pas égales. Le type indiqué est HiMetric qui correspondrait à 0,01 mm. De toutes manières, j'ai fait tourner le programme sur 12700 x 16933 sans jamais avoir autre chose que -1.
Avec la nuit qui tombe en plus du brouillard, c'est sur qu'on n'y voit goutte.
-- A+
Bonjour Geo,
Oui j'ai mesuré la taille du bouton sur l'écran, il fait environ 4 mm soit
400 Himetric comme du dis
Peut être ai-je compris quelque chose ce soir !
Bonne nuit
--
Papyjac
"Geo" a écrit :
Bonjour
> 2. Width = Height = 423
Ce qui fait un rapport de 26,44, pour mon image j'ai 26,46 sur les deux
dimensions qui ne sont pas égales.
Le type indiqué est HiMetric qui correspondrait à 0,01 mm.
De toutes manières, j'ai fait tourner le programme sur 12700 x 16933
sans jamais avoir autre chose que -1.
Avec la nuit qui tombe en plus du brouillard, c'est sur qu'on n'y voit
goutte.
Oui j'ai mesuré la taille du bouton sur l'écran, il fait environ 4 mm soit 400 Himetric comme du dis
Peut être ai-je compris quelque chose ce soir !
Bonne nuit
-- Papyjac
"Geo" a écrit :
Bonjour
> 2. Width = Height = 423
Ce qui fait un rapport de 26,44, pour mon image j'ai 26,46 sur les deux dimensions qui ne sont pas égales. Le type indiqué est HiMetric qui correspondrait à 0,01 mm. De toutes manières, j'ai fait tourner le programme sur 12700 x 16933 sans jamais avoir autre chose que -1.
Avec la nuit qui tombe en plus du brouillard, c'est sur qu'on n'y voit goutte.