Comment faire un buffer (Tableau de byte)

Signaler
Messages postés
34
Date d'inscription
lundi 15 janvier 2007
Statut
Membre
Dernière intervention
8 octobre 2009
-
Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
-
Bonjour, mon probleme est tous simple cependant je ne m'en sort pas:

Je dispose d'un PictureBox : picturebox1 et je souhaite creer un tableau de byte (buffer) de l'image qu'il contient.

Nota : L'image n'existe pas en fichier même: il s'agit en faite de fonction que j'ai récupéré qui me permettent d'obtenir une image de se que film la webcam. (Le but etant d'envoyer cette image grace a une classe winsock à un autre poste)

Je pense pas que se soit super dificil mais sa suffit pour me bloquer actuellement.

Merci

9 réponses

Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
21
Bonsoir,
Le but est de créer un nouveau Bitmap pour recevoir les données de ta picturebox et les manipuler.
Puis mettre en mémoire le contenu binaire de l'image avec la méthode Save() de notre Bitmap crée précédemment.
Et une fois en mémoire on va récupérer se contenu dans un tableau de Byte.

--------------------------------------------------------->8

Dim bmp as new Bitmap(Picturebox1.image)
Dim ms as new System.IO.MemoryStream()

bmp.Save(ms,System.Drawing.Imaging.ImageFormat.bmp)

Dim TonBuffer as byte() = ms.ToArray()

ms.Close()
ms.Dispose()

8<---------------------------------------------------------

++
Messages postés
34
Date d'inscription
lundi 15 janvier 2007
Statut
Membre
Dernière intervention
8 octobre 2009

Merci bcp sa marche du tonner meme si je suis bloqué plus loin mais bon je saurai que je peut compter sur le forum un grand merci c'est la premiere fois que l'on m'apporte une vrai réponse.
Messages postés
34
Date d'inscription
lundi 15 janvier 2007
Statut
Membre
Dernière intervention
8 octobre 2009

Un petit probleme supplementaire . sa semble ido mais comment faire l'inverse? une fois recus l'image je veut la recontruire a partir du tableau de byte?
Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
21
J'ai déposé il y a peu de temps un bout de code pour cela sur Codyx.

++
Messages postés
34
Date d'inscription
lundi 15 janvier 2007
Statut
Membre
Dernière intervention
8 octobre 2009

Merci bien mais j'ai une erreur :Une erreur générique s'est produite dans GDI+.

mon code :

Dim b() As Byte = CType(sender, Crazyht.Net.Clients.ClientTCP).RecupDonneesOctets(True)
        Dim ms As New System.IO.MemoryStream(b)
        Dim img As Image = Image.FromStream(ms)
        PictureBox1.Image = img

b() contient bien les bytes pourtant !

Peut tu m'aider stp
Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
21
As-tu comparer le contenu du tableau de byte que tu envois et le contenu de celui que tu récupères ?
Messages postés
34
Date d'inscription
lundi 15 janvier 2007
Statut
Membre
Dernière intervention
8 octobre 2009

Effectivement il doit y avoir un probleme lors du transfert donc j'ai décidé d'abandonner ma source de transfert pour en trouver une autre.

Je cherche donc maintenant une source permettant l'echange de donnée (image) entre 2 postes

Merci
Messages postés
34
Date d'inscription
lundi 15 janvier 2007
Statut
Membre
Dernière intervention
8 octobre 2009

Bonjour, apres un echec avec le code d'autre developpeur, je tente ma
chance en essayant de faire mon propre code pour passer une  image d'un
poste à un autre grace au socket.

Je sais que c'est pas bien compliqué mais je galère.

Voici mon code:

Logiciel emeteur

    Public WithEvents Soket As New Sockets.TcpListener(200)
    Public WithEvents OTimer As New Timer
    Dim s As Socket

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Soket.Start()
        s = Soket.AcceptSocket()
        OTimer.Start()
        's.Close()
    End Sub

    Private Sub OTimerTick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OTimer.Tick
           Dim mstImage As MemoryStream = New MemoryStream
            PictureBox1.Image.Save(mstImage, System.Drawing.Imaging.ImageFormat.Jpeg)
            Dim bytImage As Byte() = mstImage.GetBuffer
            Dim byteDateLine() As Byte = bytImage
            s.Send(bytImage, bytImage.Length, SocketFlags.None)
    End Sub

Logiciel recepteur

    Public WithEvents Soket As New Sockets.TcpClient
    Public WithEvents OTimer As New Timer

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Soket.Connect("127.0.0.1", 200)
        OTimer.Start()
    End Sub
    Private Sub OTimerTick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OTimer.Tick
        Try
            Dim networkStream As NetworkStream = Soket.GetStream()
           
Dim MyReceptBuffer As Byte = Soket.ReceiveBufferSize // l'erreur est
ICI  et me dit "L'opération arithmétique a prvoqué un dépassement de
capacité"
            Dim mstImage As MemoryStream = New MemoryStream(MyReceptBuffer)
            Dim img As Image = Image.FromStream(mstImage)
            PictureBox1.Image = img
            Me.Refresh()
            PictureBox1.Refresh()
        Catch
        End Try
    End Sub

Voila merci de m'aider avant que je désespère d'arriver a faire quelque chose de mes bouts de code
Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
21
Bonjour,
Je viens de te préparer un exemple à télécharger ici

++