IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Récupération zones d'une image


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 6
    Par défaut Récupération zones d'une image
    Bonjour à tous.

    Je cherche à récupérer plusieurs zones dans une image, en rentrant les coordonnées de ses différentes zones, pour ensuite les afficher sur le côté les unes à côté des autres. J'ai trouvé comment extraire une partie d'image d'une picturebox pour l'afficher dans une autre mais je ne vois pas comment faire pour en afficher plusieurs.

    Merci d'avance.

  2. #2
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour
    c'est pas clair là !!!
    Formule comme ca c'est pas ...Un peu de code svp ....sinon tu n'auras de reponse!!!

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 6
    Par défaut
    Voila le code que j'ai récuperé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Private Sub btnCopyPart_Click(sender As System.Object, e As System.EventArgs) Handles btnCopyPart.Click
     
        'Grab the content of the first PictureBox and save it as a bitmap
        Dim sourcebmp As New Bitmap(picImage.Image)
        '  Create an empty bitmap the size of the second PictureBox
        Dim destinationbmp As New Bitmap(picDestination.Width, picDestination.Height)
        ' Create a Graphics object for the destination
        Dim gr As Graphics = Graphics.FromImage(destinationbmp)
     
        ' Set the size of the area you want to copy
        Dim selectionrectangle As New Rectangle(140, 20, 270, 400)
        ' Set the size of the destination rectangle to match the size of the second PictureBox
        Dim destinationrectangle As New Rectangle(0, 0, picDestination.Width, picDestination.Height)
     
        ' Draw selected area on to the destination bitmap.
        gr.DrawImage(sourcebmp, destinationrectangle, selectionrectangle, GraphicsUnit.Pixel)
     
        ' Set the drawn destination bitmap as the image of the second PictureBox
        picDestination.Image = destinationbmp
     
      End Sub
    Source : http://vbcity.com/blogs/xtab/archive...box-image.aspx

    Maintenant comment faire pour pouvoir extraire plusieurs zones d'une même image?

  4. #4
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    Ce n'est pourtant pas compliqué, avec un minimum de logique tu peux faire ce que tu veux puisque la source que tu as récupérés est largement commentée !

  5. #5
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    Re
    Tu veux rogner des parties de l'image source en les selectionnant (avec souris,je suppose) et faire un assemblage d'image dans une GrandImage....Cest faisable mais d'abord il faut resoudre un big,big probleme:

    1/ A chaque fois que tu selectionne une zone rectangulaire et tu l'as ajoute à ton Big Image comment qu'il fait lui le big image ,il se dilate !!!
    Comme un Bitmap n'est pas Elastoc (bande dessine ) il faut le "dilater" avant d'ajouter un bout de bitmap rogne (selection) et pour resoudre ce probleme epineux il faut ce qu'il faut :

    L'explication suivante s'entend pour un affichage vertical (l'horizontal etant peu usite et incommode):
    -stocker les selections dans un List(Of Bitmap) designe par RognageImages ...
    -recreer le GrandImage recipendiaire en calculant sa largeur Maximale à partir de RognageImages et en sommant les hauteurs des bitmaps "rognages" convenablement espaces (mettons 10 dans l'exemple ci-apres)....

    -dessiner dessus avec Graphics.FromImage(GrandImage)
    -afficher le GrandImage dans picDestination...

    2/Pour des raisons de precision et comme on travaile avec la selection souris il faut que les PicBoxes ait :
    - le SizeMode =PictureBoxSizeMode.AutoSize
    - Un Panel pour recevoir chaque picbox vu le SizeMode
    - AutoScoll = true pour chaque panel
    3/ Des handlers souris pour le picsource permettant la selection et au click droit la selection est affichee...

    ingredients du code exemple:
    -dropper 2 panels
    -dropper chaque picbox dans un panel
    code vb. exemple qui debite le pauvre pingouin en morceaux ( bon appetit ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
     
    Public Class Form2
        Private RognageImages As New List(Of Bitmap)
        Private GrandImage As Bitmap = Nothing
        Public Sub New()
     
            ' Cet appel est requis par le concepteur.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            Panel1.AutoScroll = True
            Panel2.AutoScroll = True
     
            picSource.Location = New Point(0, 0)
            picSource.Size = New Size(20, 20)
            picSource.SizeMode = PictureBoxSizeMode.AutoSize
     
            picDestination.Location = New Point(0, 0)
            picDestination.Size = New Size(20, 20)
            picDestination.SizeMode = PictureBoxSizeMode.AutoSize
        End Sub
     
        Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            picSource.Image = My.Resources.Penguins
     
        End Sub
        Private selRect As Rectangle = Rectangle.Empty
        Private startPoint As Point
        Private Sub picSource_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles picSource.MouseDown
            If e.Button = MouseButtons.Left Then
                startPoint = e.Location
                selRect.Location = startPoint
                picSource.Invalidate()
            End If
        End Sub
     
        Private Sub picSource_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles picSource.MouseMove
            If e.Button = MouseButtons.Left Then
     
                selRect.Width = e.X - startPoint.X
                selRect.Height = e.Y - startPoint.Y
                picSource.Invalidate()
            End If
        End Sub
     
        Private Sub picSource_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles picSource.MouseUp
            If e.Button = MouseButtons.Right Then
                selRect.Width = e.X - startPoint.X
                selRect.Height = e.Y - startPoint.Y
     
                picSource.Invalidate()
                PerformCopy()
                selRect = Rectangle.Empty
            End If
        End Sub
     
        Private Sub picSource_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles picSource.Paint
            Dim gr As Graphics = e.Graphics
            Using selectionPen As New Pen(Brushes.Red, 1.0)
                gr.DrawRectangle(selectionPen, selRect)
            End Using
        End Sub
        Private Sub PerformCopy()
     
            Dim sourcebmp As New Bitmap(picSource.Image)
     
            Dim destinationbmp As New Bitmap(selRect.Width, selRect.Height)
     
            Dim gr As Graphics = Graphics.FromImage(destinationbmp)
            Dim destinationrectangle As New Rectangle(0, 0,
                                                      selRect.Width,
                                                      selRect.Height)
     
            gr.DrawImage(sourcebmp, destinationrectangle,
                         selRect, GraphicsUnit.Pixel)
     
            'Assemblage 
     
            RognageImages.Add(destinationbmp)
            Dim largeur As Integer = RognageImages.Max(Function(o) o.Width)
            Dim hauteur As Integer = 0
            For Each item As Bitmap In RognageImages
                hauteur += item.Height
     
            Next
            GrandImage = New Bitmap(largeur, hauteur)
     
            Dim grfxBig As Graphics = Graphics.FromImage(GrandImage)
            Dim x, y As Integer
            x = 0 : y = 0
            For i As Integer = 0 To RognageImages.Count - 1
                grfxBig.DrawImage(RognageImages(i), x, y)
                y += 10 + RognageImages(i).Height
     
            Next
     
            ' Set the drawn "big" destination bitmap as the image of the second PictureBox
            picDestination.Image = GrandImage
        End Sub
    End Class
    bon code....

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 6
    Par défaut
    Merci pour le code mais j'obtiens une erreur:

    'Penguins' est un type dans 'Resources' et ne peut pas être utilisé en tant qu'expression.

    Ligne : picSource.Image = My.Resources.Penguins

    J'ai bien ajouté l'image dans les ressources pourtant...

Discussions similaires

  1. zoomer dans une zone d'une image
    Par sanatou dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 21/02/2008, 17h14
  2. Dupliquer une zone d'une image
    Par too_Slow_ dans le forum Flash
    Réponses: 1
    Dernier message: 24/02/2007, 08h54
  3. Réponses: 10
    Dernier message: 24/05/2006, 17h28
  4. [D6] Algo de détection de zones dans une image
    Par DMO dans le forum Langage
    Réponses: 4
    Dernier message: 25/11/2005, 15h15
  5. [MFC] Surlignage d'une zone d'une image
    Par eyghon dans le forum MFC
    Réponses: 6
    Dernier message: 06/04/2005, 19h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo