Se connecter avec
S'enregistrer | Connectez-vous

Ouverture d'une image

Dernière réponse : dans Programmation

Bonjour à tous, :D 

J'ai fais l'acquisition de VB 5 non pas parce que je n'aime pas le 6 mais tous simplement parce que je disposais d'une licence. J'aimerais pouvoir chargé une image sous VB. J'ai créee mon bouton de commande que j'ai renommé, et je lui ai donné le chemin d'accès de l'image que je voulais chargé :

Open "C:\Nature\lion.jpg" For Input As #1

Cependant lorsque je met lexture j'obtiens un message d'erreur : Erreur 55 fichier déjà ouvert..

Est-il possible aussi, si je met plusieurs images dans le dossier Nature, d'ouvrir n'importe quelles images présentent dans ce dossier ?

Cordialement
LeaKciM58

Autres pages sur : ouverture image

Lassé par la pub ? Créez un compte
Expert Programmation

Salut,

VB5 et V6 sont complètement obsolètes (même s'il m'arrive encore d'utiliser le 6 ;)  ).
Si tu as des scrupules à utiliser un logiciel dont tu n'aurais pas la licence, et que tes finances sont légères, sache qu'il existe des versions gratuites des outils de développement Microsoft. Ce sont les versions Express.
Visite donc ce site : http://www.microsoft.com/express/Downloads/

  1. Open "C:\Nature\lion.jpg" For Input As #1
(Fais comme moi, respecte le règlement, présente ton code entre les balises [ code][/code])

M'enfin, tu ouvres ton fichier jpg pour écrire dedans ?
Qu'est-ce que tu cherches à faire ?

Si c'est juste à afficher une image, voici une bonne manière de faire. Mets un contrôle PictureBox sur ton formulaire et utilise ce code pour charger ton image :
  1. Picture1.Picture = LoadPicture("C:\Nature\lion.jpg")

Enfaite, j'essaie de me construire une base. Je dois en vérité pouvoir lire les informations qui sont contenu dans un QR Code. Pour cela, je dispose d'une image binaire, et d'un masque que je dois ouvrir donc je suppose pour le moment qu'il faut simplement ouvrir l'image et ne pas écrire dessus.

Maintenant qu'elle est ouverte il faut que je trouve des infos sur le traitement des images sachant que c'est une matrice (49*49)
En tout cas le code marche, super, c'est sympa.
Comment puis-je lui dire de ne pas ouvrir simplement l'image 'lion' mais n'importe quelles images qui sont dans le dossier ?
Expert Programmation

Salut LeakciM58,

J'ai un peu peur pour toi. :peur: 

T'es en train de vouloir "voir" une image QR par informatique, en VB5, sans avoir la moindre notion de programmation.
T'es pas au bout de tes peines. Mais la chance sourit aux audacieux : t'es tombé sur moi, et je vais t'aider.

Par contre, tu vas pas forcément aimer ma méthode.

1er exemple :
Leak>> Comment puis-je lui dire de ne pas ouvrir simplement l'image 'lion' mais n'importe quelles images qui sont dans le dossier ?
Zeb>> Renseigne-toi sur la fonction Dir()


Salut Zeb,

Je te remercie c'est vraiment sympa de ta part. Je dois t'avouer que l'on me demande à partir d'un programme VB de décrypter les informations qui sont présentes dans un QR Code. Ce n'est en réalité pas exactement ça, car le code a été simplifié pour nous aider. Je te remercie en tout cas encore une fois de plus pour m'apporter ton aide.

Je devrais être censé avoir des bases en VB mais j'en n'ai pas beaucoup, alors c'est vrai que quelques tuyaux peuvent s'avérer utiles, après à moi de comprendre les fonctions que tu m'as donné. Je m'occupe de ça dans la journée et je te renvoie un post ce soir 'la nuit porte conseil' :ange: 

Expert Programmation

CADEAU !!!!! :) 

Voici le code complet à mettre dans un fichier FRMQRCODE.FRM que tu ajouteras à ton projet. A étudier ;) 

  1. VERSION 5.00
  2. Begin VB.Form frmQRCode
  3. BorderStyle = 3 'Fixed Dialog
  4. Caption = "QR Code"
  5. ClientHeight = 4470
  6. ClientLeft = 45
  7. ClientTop = 330
  8. ClientWidth = 3840
  9. LinkTopic = "Form1"
  10. MaxButton = 0 'False
  11. MinButton = 0 'False
  12. ScaleHeight = 4470
  13. ScaleWidth = 3840
  14. ShowInTaskbar = 0 'False
  15. StartUpPosition = 3 'Windows Default
  16. Begin VB.PictureBox picQR
  17. Height = 3840
  18. Left = 0
  19. MousePointer = 2 'Cross
  20. Picture = "Form1.frx":0000
  21. ScaleHeight = 3780
  22. ScaleWidth = 3780
  23. TabIndex = 1
  24. Top = 0
  25. Width = 3840
  26. End
  27. Begin VB.PictureBox Picture2
  28. Height = 615
  29. Left = 0
  30. ScaleHeight = 555
  31. ScaleWidth = 3780
  32. TabIndex = 0
  33. Top = 3840
  34. Width = 3840
  35. Begin VB.Shape shpColor
  36. BackStyle = 1 'Opaque
  37. Height = 195
  38. Left = 60
  39. Top = 300
  40. Width = 555
  41. End
  42. Begin VB.Label lblG
  43. Alignment = 1 'Right Justify
  44. Caption = "100%"
  45. Height = 195
  46. Left = 2520
  47. TabIndex = 6
  48. Top = 300
  49. Width = 390
  50. End
  51. Begin VB.Label lblR
  52. Alignment = 1 'Right Justify
  53. Caption = "100%"
  54. Height = 195
  55. Left = 1800
  56. TabIndex = 5
  57. Top = 300
  58. Width = 390
  59. End
  60. Begin VB.Shape shpB
  61. BackColor = &H00FF0000&
  62. BackStyle = 1 'Opaque
  63. Height = 195
  64. Left = 3000
  65. Shape = 3 'Circle
  66. Top = 300
  67. Width = 195
  68. End
  69. Begin VB.Shape shpG
  70. BackColor = &H0000FF00&
  71. BackStyle = 1 'Opaque
  72. Height = 195
  73. Left = 2280
  74. Shape = 3 'Circle
  75. Top = 300
  76. Width = 195
  77. End
  78. Begin VB.Shape shpR
  79. BackColor = &H000000FF&
  80. BackStyle = 1 'Opaque
  81. Height = 195
  82. Left = 1560
  83. Shape = 3 'Circle
  84. Top = 300
  85. Width = 195
  86. End
  87. Begin VB.Label lblB
  88. Alignment = 1 'Right Justify
  89. Caption = "100%"
  90. Height = 195
  91. Left = 3240
  92. TabIndex = 4
  93. Top = 300
  94. Width = 390
  95. End
  96. Begin VB.Label lblXY
  97. Alignment = 2 'Center
  98. Caption = "x"
  99. Height = 195
  100. Left = 60
  101. TabIndex = 3
  102. Top = 60
  103. Width = 3555
  104. End
  105. Begin VB.Label lblCode
  106. Caption = "#FFFFFF"
  107. Height = 195
  108. Left = 720
  109. TabIndex = 2
  110. Top = 300
  111. Width = 765
  112. End
  113. End
  114. End
  115. Attribute VB_Name = "frmQRCode"
  116. Attribute VB_GlobalNameSpace = False
  117. Attribute VB_Creatable = False
  118. Attribute VB_PredeclaredId = True
  119. Attribute VB_Exposed = False
  120. Option Explicit
  121.  
  122. Private Declare Function GetPixel Lib "gdi32" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long) As Long
  123.  
  124. Private Sub Form_Load()
  125. picQR.Picture = LoadPicture("C:\Nature\lion.jpg")
  126. End Sub
  127.  
  128. Private Sub picQR_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  129. Dim color As Long
  130.  
  131. color = GetPixel(picQR.hDC, X / 15, Y / 15)
  132.  
  133. lblXY.Caption = X / 15 & " x " & Y / 15
  134. lblCode.Caption = "#" & Right("00000" & Hex(color), 6)
  135.  
  136. lblR.Caption = (color And &HFF0000 \ &H10000) * 100 \ 255 & "%"
  137. lblG.Caption = (color And &HFF00& \ &H100&) * 100 \ 255 & "%"
  138. lblB.Caption = (color And &HFF& \ &H1&) * 100 \ 255 & "%"
  139.  
  140. shpColor.BackColor = color
  141. End Sub
Expert Programmation

Ben oui c'est moi qui te l'ai fait, et rien que pour toi :spamafote:  :heink: 
Mais c'est maintenant à toi de l'étudier :) 

La documentation et les exemples trouvables par l'ami G. sont tellement accessibles que je ne t'aide pas plus. Sauf si tu as des questions précises.
Expert Programmation

Non, désolé.

J'aide volontiers, bénévolement et publiquement ceux qui se donnent la peine de partager leur problème publiquement. Ainsi, le forum vit des questions et des réponses plus ou moins pertinentes proposées.

Si je devais répondre en privé, je devrais en faire mon métier principal et demander du pognon, ce que tu ne souhaites pas, je pense.

Par ailleurs, le règlement est strict : nous nous entraidons entre développeurs, c'est tout. Mais en aucun cas le forum n'est là pour qu'on fasse ton boulot, ton stage, tes devoirs...

Que ce refus ne t'empêche pas de me solliciter. Je te répondrai toujours, avec une explication, soit pour commenter un bout de code, soit pour t'expliquer pourquoi je ne te donne pas le bout de code en question. (Oui, je sais, j'agace pas mal de monde avec mes principes à la con).

---------------------

T'as un peu regardé ce que je t'ai proposé ?
Tu t'en sors avec Dir() ?
Tu pourrais mettre ton fichier QR code en ligne ?

Non il n'y a pas de soucis, je comprends tes principes. C'était simplement une question. J'ai regardé ce que tu m'as proposé je vais en remettre une couche ce soir, mais je t'avouerais que je suis à la peine notamment avec la fonction Dir()
Je ne trouve pas d'explications pertinentes sur ce sujet, qui me permettent de bien l'assimiler. Pour le mettre en ligne, il faudrait que je dispose d'un site internet...

Salut Zeb,

Bon à première vue je suppose, qu'en faite tu as créer une image de QR CODE. Je ne pourrais pas traduire toutes les lignes du programme mais je le comprends comme ça avec tes 'alignements', 'startposition ou encore ScaleHeight qui doivent définir la grosseur des carrés..Je pense que ton programme consistait à faire une image QR Code, mais à le mettre en place...j'en suis incapable

Pour la fonction Dir( ) je trouve un peu de tout et n'importe quoi, et je n'arrive pas à m'y faire..
Expert Programmation

Euh, j'espère que seul l'image BMP est à traiter par toi. Parce que sinon, la réponse va être : " Va faire une école d'ingénieur en informatique, option traitement des images, avant de continuer."

Bon, et qu'est-ce qu'on fait de cette image ?
Expert Programmation

Eh, il est explicitement interdit de balancer les énoncés des travaux, devoirs, exercices que tu aurais à faire. On est là pour t'aider, pas pour faire ton boulot !

Donc, on reprend si tu veux bien.
Comme tu as un gros problème, je propose de le découper en petits problèmes.

Problème n°1 : Transformer une image en 0 et en 1.

Avec le code proposé dans picQR_MouseMove, t'as une idée de comment faire ?

Désolé Zeb je pensais bien faire. Je ne veux pas que tu fasses mon boulot c'était simplement pour toi, pour que tu puisses mieux comprendre.

J'ai réfléchi au sujet. Je pensais a:
1/ ouvrir les images qui sont présentes dans le dossier n'importe lesquelles avec la fonction Dir(
2/ décrypter l'image sous forme de matrice
3/ traduire l'image (les infos contenus dedans)

Je pense que c'est comme ca que tu voudras me faire procéder mais pour le moment je n'ai pas de connaissances sur la fonction picQR_Mousemove. Mais j'avais refais un petit exercice pour refaire Paint en utilisant Mousemove et Mousedown ...

Je pense que je devrais charger image avec une picture box puis après transformer la matrice en mettant l'image dans un repère orthonormé, puis le convertir en binaire pour ensuite avoir la matrice de 49x49..
On ma dit également d'utiliser la fonction inverse de RGB et la méthode point..

Ensuite lecture Dun fichier ligne par ligne et utiliser la fonction Csplit
Dit moi si je m'enflamme LOL
Expert Programmation

Ah, voila qui commence à devenir intéressant.

On s'en fout de la commande Dir(). Ca permet de trouver des fichiers dans un répertoire. Pour ton projet, tu peux tout aussi bien demander le nom du fichier à l'utilisateur. C'est pas le coeur de ton problème.

Tiens d'ailleurs je te la fais la fonction "Lister tous les fichiers du répertoire" :
  1. Dim s As String
  2.  
  3. s = Dir("*.*")
  4. Do While s <> ""
  5. MsgBox s
  6. s = Dir()
  7. Loop
Maintenant, s'il faut faire quelque chose avec le nom du fichier, il faut remplacer la ligne 5 par quelque chose de plus utile.

Sinon, utilise le composant CommonDialog.

Or donc, le code de la fonction picQR_MouseMove que je te proposais est faite pour t'aider à créer ta fonction décrypter_image_sous_forme_de_matrice.

Pour la matrice, c'est simple :
  1. Dim matrice(1 To 49, 1 To 49) As Integer
On aurait pu utiliser des booléens, mais en fait on ne gagne rien.

Pour le code, étudie picQR_MouseMove, le boulot est fait à 80%. (Si tu ne vois vraiment pas, insiste ;)  )

Salut Zeb. Laisse tomber j'ai réussi a ouvrir n'importe quel image avec le bouton commondialog ..
Maintenant il faut et c'est la première étape mettre l'image sous forme de matrice avec la méthode point .. Tu connais cette méthode ? Récupérer tout les pixels a partir d'un tableau
Expert Programmation

Citation :
mais comment 'ouvrir l'image qui m'intéresse ' ?

J'en sais foutre rien !!!
Citation :
j'ai réussi a ouvrir n'importe quel image avec le bouton commondialog ..
Ah quand même ! T'as compris que tes questions sur ce sujet étaient à côté de la plaque ?

Citation :
Maintenant il faut et c'est la première étape mettre l'image sous forme de matrice avec la méthode point
On est d'accord.
Donc tu charges ton image binaire artificielle (on verra plus tard pour les images distordue en niveau de gris)

Et tu y vas point par point. Attention à ne pas confondre point informatique (pixel) et point QRCode (carré de n x n pixel de côté).

La formule magique a déjà été donnée :
  1. color = GetPixel(picQR.hDC, X / 15, Y / 15)
Ça, c'est pour les points informatiques. Ne me demande pas pourquoi, le VB multiplie les coordonnées de ces pixels par 15 :pfff: 

Maintenant, à toi d'adapter ces points informatiques en point QRCode. Je te propose d'utiliser f(x) = n.x + n/2 pour sauter de point QRCode en point QRCode.

Bon Zeb j'ai trouvé une solution sur internet pour la matrice mais j'ai du mal à la comprendre. En faite, pour ta méthode je ne comprends pas ou je dois insérer la ligne de code que tu m'as donné, je continue à me renseigner sur la méthode Point. Concernant la procédure que j'ai trouvé la voici :

Private Sub MatrixFromImage(Picture As PictureBox, Matrice() As Pixel)

Dim PicBits() As Byte, PicInfo As BITMAP
Dim Size As Long
Dim i, j As Integer
Dim Z As Long

GetObject Picture.Image, Len(PicInfo), PicInfo

Size = PicInfo.bmWidth * PicInfo.bmBitsPixel * PicInfo.bmHeight / 8

ReDim PicBits(Size) As Byte
ReDim Matrice(PicInfo.bmHeight, PicInfo.bmWidth) As Pixel

GetBitmapBits Picture.Image, Size, PicBits(1)

For i = 1 To PicInfo.bmHeight on fait deux boucles pour balayer nos colonnes et lignes
For j = 1 To PicInfo.bmWidth
Z = (i - 1) * PicInfo.bmWidth * 4 + (j - 1) * 4 + 1
Matrice(i, j).Blue = PicBits(Z)
Matrice(i, j).Green = PicBits(Z + 1) ici on récupère la couleur des pixels
Matrice(i, j).Red = PicBits(Z + 2)
Next j
Next i

NHeight = PicInfo.bmHeight
MWidth = PicInfo.bmWidth

End Sub
Lassé par la pub ? Créez un compte