Télécharger une image d'un site web et l'afficher dans un picturebox

Soyez le premier à donner votre avis sur cette source.

Vue 12 099 fois - Téléchargée 644 fois

Description

Bonjour,

Voici un simple exemple qui illustre l'utilisation des deux classes HttpWebRequest et HttpWebResponse pour acquérir un Paquet HTTP
Dans cette petite source, on utilise ces deux classe pour vérifier si une réponse du serveur contient des données d'une image et si oui la transformée d'un NetworkStream en Bitmap, puis l'afficher dans un TextBox.

Bon prog

Source / Exemple :


'=====================================================================================
'                           #  #                                                     '
'                 ##        #  #         # #      @ @ @                              '
'    ###    "    #####       #  #          # #      " "      #                       '
'   ##  #     ##    #####    #  #   ####    # #        #  #   #                      '
'  ########### #######     ##   #  #    ##   # #    #   #  #   #                     '
' ##                      #            ####  # #   ##    #  #   #                #   '
'        ## ## @           #  #    #####      # #  #  #   #  #  #                ##  '
'      #        "        ##    #### #       ##  # #### ######  #                  ## '
'       #          #####  ##  #   ##   @  #                           #  #  #      # '
'        #                   #          " #     #                     #  #  #     #  '
'         #                ##            #    #  #################################   '
'          #####      #####           ###    # ##                                    '
'               ######                      #                                ##      '
'=====================================================================================
'Utilisation Libre
'Auteur: Boutemine Oualid

Imports System
Imports System.Net
Imports System.IO

Public Class frmMain
    '''<summary>
    '''The stream buffer size.
    '''</summary>
    Public Const BufferSize As Integer = 512 * 1024
    '''<summary>
    '''The bloc reading size.
    '''</summary>
    Public Const BufferReadSize As Integer = 1024

    Private Sub btnGetPicture_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetPicture.Click
        'Envoi de la requette.
        Dim imageRequest As HttpWebRequest
        'Lecture de la réponse
        Dim serverResponse As WebResponse
        Try
            imageRequest = CType(WebRequest.Create(txtURL.Text), HttpWebRequest)
            serverResponse = imageRequest.GetResponse()
            'Vérification que le paquet HTTP est descriptif d'une image
            If Not serverResponse.ContentType.StartsWith("image/") Then
                MsgBox("Le fichier n'est pas une image valide!", MsgBoxStyle.Critical)
                Exit Sub
            End If
            'Analyse du contenu du paquet HTTP
            Dim responseStream As Stream = serverResponse.GetResponseStream()
            'Utiliser pour stocker temporairement le contenu du paquet.
            Dim buffer(BufferSize) As Byte
            'Nombre d'octets lus dans la portion courante du Flux.
            Dim read As Integer
            'Nombre total des octets lus
            Dim parsedBytes As Integer = 0
            While True
                'Lecture d'un nouveau bloc de taille maximale 1024 octet (BufferReadSize)
                read = responseStream.Read(buffer, parsedBytes, BufferReadSize)
                If read = 0 Then Exit While 'Fin du flux.
                parsedBytes += read
            End While
            'Libération de ressources mémoire.
            responseStream.Close()
            'Transformation des données du buffer vers un Memory Stream
            Dim pictureStream As MemoryStream = New MemoryStream(buffer)
            'Transformation en Image
            Dim logo As Image = Image.FromStream(pictureStream)
            'Affichage de l'image.
            pbxLogo.Image = logo
        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            If Not serverResponse Is Nothing Then
                serverResponse.Close()
            End If
        End Try
    End Sub
End Class

Conclusion :


C'est le mécanisme de base pour le web browser.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_bigflo93
Messages postés
50
Date d'inscription
mardi 21 octobre 2003
Statut
Membre
Dernière intervention
13 septembre 2008
-
Bonjour,

Pourquoi ne pas plutôt utiliser la classe WebClient ?
Cette classe propose la méthode OpenRead qui renvoie un Stream, que l'on peut donc utiliser avec la pictureBox via la méthode static Image.FromStream.
Ca ne serait pas plus simple ? :)
gillardg
Messages postés
3288
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 septembre 2014
3 -
un peu comme ceci : ( pas de moi )

Public Function GetOnlineImage(ByVal URL As String) As Image
Dim i As Image
Dim w As New System.Net.WebClient
Dim b() As Byte
Dim m As System.IO.MemoryStream

' download the Image Data in a Byte array
b = w.DownloadData(URL)

' create a memory stream from that Byte array
m = New System.IO.MemoryStream(b)
' now create an Image from Memory Stream
i = Image.FromStream(m)

' release the WebClient
w.Dispose()

' return image
Return i
End Function
BadoqueAlex
Messages postés
129
Date d'inscription
mardi 20 juillet 2004
Statut
Membre
Dernière intervention
6 juin 2009
-
Et pourquoi ne pas utiliser les propriétés Asynchrones d'une picturebox ? ... Ralalala
Bon, même si afficher l'image n'est pas le but premier, il ne faut pas induire les gens dans l'erreur.
cs_boutemine
Messages postés
78
Date d'inscription
dimanche 8 mai 2005
Statut
Membre
Dernière intervention
21 mars 2018
1 -
Hollaaaaaa ,
Il s'agit d'une methode comme les autres, le principe ici est d'illustrer l'utilisation de la classe WebResponse et comment vérifier si un paquet HTTP contient une image.

je sais que l'utilisation de la classe WebClient est mieux, mais l'utilité de l'utilisation de la classe WebResponse vient dans le cas de communication avec une Camera IP, le serveur video inclus dans la cam repond par 2 methodes classiques:
- Une image simple, et la l'utilisation de la class WebClient suffit.
- Une suite d'images: MotionJPEG, et ici on doit traiter le paquet manuellement pour le filtrer et extraire les images, donc on doit vérifier si c'est une suite d'image ou non.

Voici un exemple d'une caméra ip libre sur le net.
http://195.243.185.195/axis-cgi/jpg/image.cgi?camera=1
http://195.243.185.195/axis-cgi/jpg/image.cgi?camera=2
http://195.243.185.195/axis-cgi/jpg/image.cgi?camera=3
http://195.243.185.195/axis-cgi/jpg/image.cgi?camera=4
(Airport de stuttgart
Ici l'utilisation de la class WebResponse peut aider pour identifier le type du paquet (ContentType = "multipart/x-mixed-replace; boundary=--myboundary"

Essayer maintenant avec le mJPEG
http://195.243.185.195/axis-cgi/mjpg/video.cgi?camera=1

Ici vous serez obliger de connaître l'architecture du stream de reponse pour le parser en suite d'images affichables sur un picture box.

Bon prog
gillardg
Messages postés
3288
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 septembre 2014
3 -
merci pour l'explication
bonne soirée

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.