Problème avec la création d'un logiciel. (Convertisseur)

Résolu
cs_alexis14 Messages postés 10 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 24 juin 2010 - 28 mai 2010 à 22:21
cs_alexis14 Messages postés 10 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 24 juin 2010 - 24 juin 2010 à 14:26
Bonjour, donc voilà, j'essais de créer un logiciel permettant de convertir une image en un code héxadécimal pour une calculatrice Texas Instrument. Le problème c'est que j'ai une erreur lors de la génération du code, l'erreur vient de la ligne:

If bmp.GetPixel(8 * B + 7 - C, A).ToArgb = 1 Then

Et l'erreur est: "Le paramètre doit être positif et inférieur à la largeur. Nom du paramètre : x"

Pourtant 8 * B + 7 - C est toujours supérieur ou égal à zéro c'est pourquoi je ne comprend pas...

Pour ceux qui souhaite voir le problème d'un peu plus près voici le lien pour télécharger la source: Ma source.

Merci d'avance.

21 réponses

raffika Messages postés 269 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 12 mars 2011
24 juin 2010 à 10:42
Ps : regarde ce que ton code fait :
        Dim img As Bitmap = Image ''Déclare une nouvelle image nommée img, inutile car tu peux utiliser directement Image...
        Dim b As New Bitmap(50, 75) 'Déclare une nouvelle Image Bitmap de 50x75 nommée B
        Dim g As Graphics = Graphics.FromImage(b) ''Bon ça c'est pour dessiner dans B
        'g.DrawImage(img, New Rectangle(0, 0, b.Width, b.Height), New Rectangle(0, 0, img.Width, img.Height), GraphicsUnit.Pixel)

        ''Serait plus correct :
        g.DrawImage(img, New Rectangle(0, 0, b.Width, b.Height), New Rectangle(0, 0, b.Width, b.Height), GraphicsUnit.Pixel) ''Dessine dans B un 'bout' de l'image IMG de taille 50x75

        'b = Image ''B redevient l'image IMAGE donc ce qui était dessiné dessus est effacé et remplacé par l'image 'IMAGE'
        PictureBox1.Image = b

Sinon pour g.DrawImage tout dépend si tu veux juste un rectangle contenant
un bout 50x75 pixels de l'image situé au coin supérieur gauche ou
rédimensionner l'image en entière... salut
3
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
28 mai 2010 à 22:47
Bonjour,

Le message te dis de rester dans les bornes, vérifie que tes 2 paramètres ne passent jamais à 0 et ne dépassent pas la zone de dessin.

Sinon, quand tu as l'erreur, espionne la valeur des variables pour voir et reviens ensuite :)

Mon site
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
29 mai 2010 à 10:04
8 * B + 7 - C peut varier de 0 à 87, cela signifie que ton bmp doit avoir au minimum 88 pixels en X. s'il en a moins tu auras une erreur


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
cs_alexis14 Messages postés 10 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 24 juin 2010
29 mai 2010 à 11:20
Le bmp fait 94x62 pixels, or X ne dépasse pas 87 et Y ne dépasse pas 62 c'est pourquoi je ne comprend pas...

Sinon comment espionner la valeur des variables ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
raffika Messages postés 269 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 12 mars 2011
29 mai 2010 à 19:31
Salut,
j'ai essayé ta source avec une image BMP 94x62
Puis j'ai cliqué sur générer, l'erreur est donc
apparue, à la ligne
If bmp.GetPixel(B, A).ToArgb = 1 Then
j'ai ensuite passé le curseur sur B et
j'ai constaté que sa valeur était de 94...
Donc pas inférieur à la longueur de 94...
'Le paramètre doit être positif et inférieur à la largeur.'
Ce qui n'est pas le cas...
Alors peut être que dans ta boucle :
For B = 88 To 94 Step 1
tu devrais rempacer 94 par 93 et
peut être du coup enlever 1 à 88.

a+
0
raffika Messages postés 269 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 12 mars 2011
29 mai 2010 à 19:55
PS : en regardant un peu ta source j ai constaté aussi
des boucles comme :
For A = 0 To 62
alors que A est passé en deuxieme parametre de bmp.getpixel :
If bmp.GetPixel(8 * B + 7 - C, A ).ToArgb = 1 Then
Donc même erreur car A = 0 et doit être positif...
0
raffika Messages postés 269 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 12 mars 2011
29 mai 2010 à 20:13
Là ton programme à l'air de marcher,
j'ai juste remplacé

For B = 88 To 94 Step 1
par
For B = 87 To 93 Step 1

et

For A = 0 To 62
par
For A = 1 To 61

Salut
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
29 mai 2010 à 20:30
A peut tout à fait être égal à 0, puis que en .Net les index vont de 0 à longueur -1 et non pas de 1 à longueur.

Les bonnes valeurs sont

For A = 0 To 61
For B = 0 To 10
X = 0
For C = 7 To 0 Step -1
......
For B = 88 To 93 Step 1
......


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
cs_alexis14 Messages postés 10 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 24 juin 2010
30 mai 2010 à 20:04
Merci de votre réponse, la génération fonctionne par contre il n'y a que des zéros or il devrait y avoir d'autres valeurs quand c'est un pixel noir, cela signifie que ce n'est pas la bonne image que la logiciel analyse.
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
30 mai 2010 à 20:26
Vérifie au niveau de ces 2 lignes si c'est bien avec 1 qu'il faut faire la comparaison. Pour moi ça serait plutot -1

If bmp.GetPixel(8 * B + 7 - C, A).ToArgb = 1 Then
......
If bmp.GetPixel(B, A).ToArgb = 1 Then
....


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
cs_alexis14 Messages postés 10 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 24 juin 2010
30 mai 2010 à 20:40
Oui j'ai bien mis 1 (Noir).
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
30 mai 2010 à 21:16
Ok, tu met 1 pour du noir or le noir pur c'est 0 si on tient pas compte du paramètre Alpha et -16777216 avec Alpha.

Dans ton image, pour le noir tu utilise Color.Black.
Dans ta comparaison comme c'est du Argb que tu compare, remplace plutôt le 1 par Color.Black.ToArgb, ça devrait être plus juste.


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
cs_alexis14 Messages postés 10 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 24 juin 2010
31 mai 2010 à 18:08
C'est bon ça fonctionne, merci !
0
cs_alexis14 Messages postés 10 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 24 juin 2010
21 juin 2010 à 17:33
Désolé mais j'aimerai améliorer mon logiciel et je voudrai savoir comment redimensionner automatiquement une image en changeant les pixels ?

Exemple: Passer de 100x100 pixels à 50x75 pixels.
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
21 juin 2010 à 18:59
sur ce point là je suis incompétent, désolé.


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
cs_alexis14 Messages postés 10 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 24 juin 2010
21 juin 2010 à 19:17
Et savez-vous comment créer un fichier à partir de VB en copiant le contenu de la TextBox dans ce fichier mais en langage binaire ?
0
Utilisateur anonyme
21 juin 2010 à 20:41
Bonsoir,
Pour passer une image de n'importe quelle taille a 50x75 tu peux faire comme cela :
Dim img As Bitmap = Bitmap.FromFile(Application.StartupPath & "\test.jpg")
Dim b As New Bitmap(50, 75)
Dim g As Graphics = Graphics.FromImage(b)
g.DrawImage(img, New Rectangle(0, 0, b.Width, b.Height), New Rectangle(0, 0, img.Width, img.Height), GraphicsUnit.Pixel)
b.Save(Application.StartupPath & "\test_mini.jpg", Imaging.ImageFormat.Jpeg)


et pour transformer un string en données binaires

Dim binaires() As Byte = System.Text.Encoding.Default.GetBytes("salut comment ca va?")


Bonne soirée.
0
cs_alexis14 Messages postés 10 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 24 juin 2010
22 juin 2010 à 09:38
Merci mais je souhaite modifier la taille d'une image déjà chargée qui s'appelle par exemple image, j'obtiens ce code:

Dim img As Bitmap = image
Dim b As New Bitmap(50, 75)
Dim g As Graphics = Graphics.FromImage(b)
g.DrawImage(img, New Rectangle(0, 0, b.Width, b.Height), New Rectangle(0, 0, img.Width, img.Height), GraphicsUnit.Pixel)
b = image


Mais l'image ne change pas de taille c'est normal ?
0
cs_alexis14 Messages postés 10 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 24 juin 2010
24 juin 2010 à 09:13
Peut être car b et image sont incompatible ?
0
raffika Messages postés 269 Date d'inscription dimanche 31 mai 2009 Statut Membre Dernière intervention 12 mars 2011
24 juin 2010 à 10:13
Salut, j'ai un code qui marche pour redimensionner
l'image, dans ce code, PictureBox1 contiendra l'image
redimensionnée (PictureBox1 a la propriété SizeMode AutoSize pour pouvoir récupérer Width et Height...)
Voilà ce que j'utilise :
        Dim b As Bitmap = New Bitmap(50, 75) 'Déclare une nouvelle image nommée b
        Dim g As Graphics = Graphics.FromImage(b)
        g.DrawImage(Image.FromFile("image.jpg"), New Rectangle(0, 0, b.Width, b.Height))''Dessine un rectangle composé d'une image de 0;0 à 50;75

        PictureBox1.Image = b''Met l'image b dans l'image du picturebox


a+
0
Rejoignez-nous