Découper une image en plusieurs parties puis la ré assembler

neyja 13 Messages postés lundi 30 mai 2011Date d'inscription 2 mars 2016 Dernière intervention - 28 févr. 2016 à 16:17 - Dernière réponse : ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention
- 12 mars 2016 à 14:46
Bonsoir à tous, depuis plusieurs jours je souhaite essayer de "séparer" une image en plusieurs parties puis les ré assembler pour reformer l'image et l’afficher à nouveau pour vérifier que l'image est identique.

Mon problème étant que je ne sais pas de quelle manière procéder, je me suis fait deux fonctions de base :
- une pour convertir l'image originale en memorystream
- une seconde pour récupérer l'image à partir du memorystream

- mon premier essai a été de mettre une image dans un picturebox, de le convertir puis de le récupérer et enfin l'afficher pour vérifier que c'est bon.
Jusque la pas de soucis ça fonctionne


Function MemoryStreamToBitmap(ByVal ms As MemoryStream)
Dim Bitmap As Bitmap = Image.FromStream(ms)
Return Bitmap
End Function

Function BitmapToMemoryStream(ByVal Bitmap As Bitmap)
Dim ms As New MemoryStream
Bitmap.Save(ms, Bitmap.RawFormat)
Return ms
End Function



Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim Stream As MemoryStream = BitmapToMemoryStream(PictureBox1.Image)
Dim Bitmap As Bitmap = MemoryStreamToBitmap(Stream)

PictureBox2.Image = Bitmap
End Sub


Ce que j'aimerais faire maintenant, c'est "découper" le memorystream de l'image originale en plusieurs parties, par exemple en 10, puis ré assembler ces 10 parties pour retrouver limage.
Je ne sais pas trop comment m'y prendre j'ai commencé le squelette :






Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim Stream As MemoryStream = BitmapToMemoryStream(PictureBox1.Image)

'--
Dim SizeSplitter As Double = PictureSize / 10
Dim NewBitmap As MemoryStream

For i = 1 To 10
' Ajouter la quantité SizeSplitter à NewBitmap
Next
' NewBitmap est égal à Stream
'--
Dim Bitmap As Bitmap = MemoryStreamToBitmap(NewBitmap)
PictureBox2.Image = Bitmap
End Sub


Je ne sais pas comment m'y prendre pouvez-vous m'expliquer svp ?

Bonne soirée à tous
Afficher la suite 

29 réponses

Répondre au sujet
Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention - 28 févr. 2016 à 17:28
0
Utile
1
Bonjour neyja
Pour la découpe, vous pouvez utiliser
http://codes-sources.commentcamarche.net/source/54895-decoupe-d-une-image
Cordialement.
Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention - 29 févr. 2016 à 11:06
Avez-vous tenté de faire fonctionner le code que je vous ai donné ?
Commenter la réponse de Zermelo
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 1/03/2016 à 06:18
0
Utile
Bonjour,

VB6 dispose pour cde faire d'un contrôle très pratique nommé PictureClip, dont je ne trouve pas l'équivalent en VB.Net ....
Dommage .
Ceci étant dit, j'ai personnellement toujours préféré (avec VB6) la plus grande liberté de découpage qu'offre l'utilisation de la fonction StretchBlt de la librairie gdi32 de l'Api de Windows, en ce sens qu'elle permet de définir comme on l'entend (et non uniquement en parts égales) tel ou tel autre rectangle d'un bitmap.
C'est donc cette fonction, que j'utiliserais avec VB.Net si cette version de Visual Basic n'offrait pas du "plus mieux"...

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Commenter la réponse de ucfoutu
Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention - 1 mars 2016 à 06:40
0
Utile
6
Je me retire donc.
Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention > ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 2 mars 2016 à 10:32
Bonjour ucfoutu.
Oh oui, il existe en vb.net une fonction permettant le découpage! Elle se nomme CopyFromScreen, et notre demandeur s'en serait aperçu s'il avait ouvert le code-source que j'avais conçu naguère. Et comme je ne sait faire de la découpe que par CopyFromScreen, je préfère me retirer.
Par ailleurs, quand on lance le programme, on voit deux boutons qui disent successivement,
– Ouvrir le fichier de l'image d'origine,
– Découper l'image,
– Enregistrer le fichier de l'image découpée,
le tout avec le mode d'emploi des réglages à gauche, à droite, en haut, et en bas. Il me semble que l'on peut difficilement se tromper sur le sujet.
Bien amicalement.
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention > Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention - 2 mars 2016 à 11:31
Oui, existent même apparemment plusieurs méthodes.
Je viens d'en voir une dont l'utilisation serait à mon avis également possible :
https://msdn.microsoft.com/fr-fr/library/ms142041%28v=vs.110%29.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2
Il me semble qu'il suffit de définir (x et y) les coordonnées où copier sur la nouvelle image et le rectangle à copier sur l'image source.
Je crois dont comprendre que x = toujours 0 et y également (coin supérieur gauche de la destination) et qu'il faut faire varier srcRect (les rectangles successifs à copier sur l'image source).
Pour ce qui est ensuite de la "reconstitution : créer une image vide de hauteur = à la somme des hauteurs et de largeur égale à la somme des largeurs, puis utiliser la même méthode, mais cette fois-ci en faisant varier x et y (dans l'image reconstituée) pour y coller tour à tour les rectangles obtenus par l'opération de découpage.
Il est alors à prévoir une liste (array ?, matrice ? autre ?) des images "découpées", dans l'ordre de leur création. Et si la découpe n'a pas été faite en rectangles égaux : y ajouter la définition de chaque rectangle.
Comment écrire cela en VB.Net (si cette méthode est bonne) ? Je ne m'y aventure pas, ne connaissant pas ce langage, mais ce ne devrait pas être compliqué, à première vue....
Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention > ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 2 mars 2016 à 14:35
Bien. Je vais m'y mettre, mais cela risque d'être long car j'ai mes petits enfants à la maison. J'ai seulement pris le temps de faire un tour d'horizon qui m'a convaincu que la méthode est bonne, et aussi qu'avec d'autres mots l'organisation du reste est la même que la tienne.
Cela fait, faudra-t-il donner du "tout-cuit"?
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention > Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention - 2 mars 2016 à 15:45
Merci de t'y mettre, mais ne donne pas du complètement "cuit". Montre-lui l'essentiel et laisse-le faire le reste. D'autant que je crois avoir compris qu'il faisait cela dans un but d'apprentissage (ce dont je le félicite).
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention > ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 2 mars 2016 à 20:07
Tu peux par exemple montrer à neyja comment on peut dessiner dans une picturebox "portion" un rectangle spécifique et défini d'une picturebox "le_tout".
Et lui laisser le soin de faire le reste, qui n'est qu'arithmétique.
Tu peux par contre également appeler son attention sur le fait qu'unj pixel n'étant pas divisible, il lui faudra inclure dans ses calculs arithmétiques les faits suivants :
- la dernière "colonne" des "sous-rectangles/portions" pourra dans certains cas (largeur totale non divisible par le nombre de "colonnes") avoir une largeur différente des autres
- idem en ce qui concerne les "sous-lignes/portions)
il est par exemple assez clair que diviser en 9 "sous-images" une image de 40 pixels par 10 pixels ne saurait aboutir à 9 sous-rectangles de dimensions égales. C'est évident et comment s'y prendre pour se "raccrocher aux branches" est et doit rester le résultat de la pensée, de l'arithmétique, de la perception de l'équilibre, etc ... et n'a rien à voir avec le développement en soi et tout à voir avec la logique de la pensée.
Commenter la réponse de Zermelo
cs_Le Pivert 5067 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 23 avril 2018 Dernière intervention - 1 mars 2016 à 09:22
Commenter la réponse de cs_Le Pivert
neyja 13 Messages postés lundi 30 mai 2011Date d'inscription 2 mars 2016 Dernière intervention - 2 mars 2016 à 22:39
0
Utile
Bonsoir, merci pour vos réponses.
Je m'excuse de ne pas avoir répondu plus tôt j'ai beaucoup de travail cette semaine ^^"
Je vais étudier au plus vite vos propositions, encore désolé de ne pas avoir donné suite à vos réponses.
Bonne soirée
Commenter la réponse de neyja
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 3/03/2016 à 07:07
0
Utile
Je disais plus haut que plusieurs méthodes semblent pouvoir être utilisées...
Celle-ci également, à mon avis :
https://msdn.microsoft.com/fr-fr/library/ezs7679t%28v=vs.110%29.aspx

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Commenter la réponse de ucfoutu
cs_Le Pivert 5067 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 23 avril 2018 Dernière intervention - 3 mars 2016 à 14:33
0
Utile
2
En partant de ce programme, j'ai fait un découpage d'images dans un panel en 12 pictureBox. L'image en Portrait ou Paysage est prise en compte:

http://codes-sources.commentcamarche.net/source/100228-puzzle-en-vb-net

Pour avoir une image de meilleur qualité je l'ai redimensionnée.

Ouvrir un nouveau projet mettre un Form de : 462 x 451

Mettre un Panel de: 419 x 319

Et un Button: Button1

En double cliquant sur une PictureBox, vous avez son nom

Voici le code:

Imports System.IO
Imports System.Drawing.Imaging
Public Class Form1
#Region "Déclarations"
   Dim x, y, diff, dify, i As Int32
    Dim path As String
    Dim w, h, r, vignette As Integer
    Dim rapport As Double
    Dim img As Image
    Dim paysage As Boolean
#End Region
#Region "Ouverture"
    Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs)
        System.IO.File.Delete(Application.StartupPath & "\redim.jpg") 'supprime image redimensionnée
    End Sub
    Private Sub Form1_Load_1(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Button1.Text = "Ouvrir image"
        Me.MaximizeBox = False
    End Sub
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim chemin As String = Application.StartupPath & "\redim.jpg" 'chemin image redimensionnée
        Dim j As Integer
        vignette = 100
        Dim ofd As New OpenFileDialog
        With ofd
            .Multiselect = True
            .Title = "Choisissez une image"
            .Filter = "jpeg (*.jpg)|*.jpg|gif (*.gif)|*.gif|tiff (*.tif)|*.tif|bmp (*.bmp)|*.bmp|png (*.png)|*.png"
            .FilterIndex = 1
            .RestoreDirectory = False
            If .ShowDialog() = Windows.Forms.DialogResult.OK Then
                path = .FileName 'chemin image source
                img = Image.FromFile(path)
                r = CInt(img.HorizontalResolution) 'résolution image
                w = img.Width 'largeur image
                h = img.Height ' hauteur image
                If w < h Then
                    paysage = False
                    rapport = h / w
                    RedimensionnerImage(path, chemin, CInt(400 / rapport), 400, r) 'portrait
                Else
                    paysage = True
                    rapport = (w / h)
                    RedimensionnerImage(path, chemin, 400, CInt(400 / rapport), r) 'paysage
                End If
                dimension() 'dimension Panel
                'On découpe et dresse une liste des images 100x100
                For j = 0 To 11 Step 1
                    'création pictureBox
                    Dim pic As New PictureBox
                    i += 1
                    pic.Name = "Image " & i
                    pic.BorderStyle = BorderStyle.Fixed3D
                    If w < h Then
                        pic.Image = ImagePart_haut(chemin, x, y, vignette, vignette) 'portrait
                    Else
                        pic.Image = ImagePart(chemin, x, y, vignette, vignette) 'paysage
                    End If
                    pic.SetBounds(x, y, vignette, vignette)
                    x += vignette
                    'vérifier s'il ya suffisamment d'espace dans l'axe x pour ajouter une image
                    If x >= Panel1.Width Or (x + vignette) > Panel1.Width Then
                        diff = Panel1.Width - x
                        'S'il n'y a pas assez d'espace, commencer une nouvelle ligne ci-dessous
                        y += vignette
                        x = 0
                    End If
                    If ((y + vignette) > Panel1.Height) Then
                        dify = Panel1.Height - y
                    End If
                    'controle PictureBox
                    AddHandler pic.MouseDown, AddressOf PictureBox_MouseDown
                    AddHandler pic.MouseMove, AddressOf PictureBox_MouseMove
                    AddHandler pic.DoubleClick, AddressOf PictureBox_DoubleClick
                    'ajouter une image
                    Panel1.Controls.Add(pic)
                Next
            Else
                MessageBox.Show("Opération annulée par l'utilisateur!", "Ouverture image", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Exit Sub
            End If
            .Dispose()
        End With
        Button1.Enabled = False
    End Sub
#End Region
#Region "Fonctions"
    ' Fonction qui retourne une image redimensionnée
    '   path: Chemin de l'image (Ex: C:\images\pic.jpg)
    '   width: largeur souhaitée
    '   height: hauteur souhaitée
    Private Function ResizedImage(ByVal path As String, ByVal width As Integer, ByVal height As Integer) As Image
        Try
            Return Bitmap.FromFile(path).GetThumbnailImage(width, height, Nothing, Nothing)
        Catch
            Return Nothing
        End Try
    End Function
    ' Fonction qui retourne une partie d'image
    '   path: Chemin de l'image (Ex: C:\images\pic.jpg)
    '   width: largeur souhaitée
    '   height: hauteur souhaitée
    '   x: position de départ (x)
    '   y: position de départ (y)
    Private Function ImagePart(ByVal path As String, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer) As Image 'paysage
        Dim ImaSource = ResizedImage(path, 400, 300)
        Dim nouvImage As New Bitmap(width, height)
        Dim graph As Graphics = Graphics.FromImage(nouvImage)
        Dim rect As New Rectangle(0, 0, width, height)
        graph.DrawImage(ImaSource, rect, x, y, width, height, GraphicsUnit.Pixel)
        nouvImage.SetResolution(r, r)
        Return nouvImage
    End Function
    Private Function ImagePart_haut(ByVal path As String, ByVal x As Integer, ByVal y As Integer, ByVal width As Integer, ByVal height As Integer) As Image 'portrait
        Dim ImaSource = ResizedImage(path, 300, 400)
        Dim nouvImage As New Bitmap(width, height)
        Dim graph As Graphics = Graphics.FromImage(nouvImage)
        Dim rect As New Rectangle(0, 0, width, height)
        graph.DrawImage(ImaSource, rect, x, y, width, height, GraphicsUnit.Pixel)
        nouvImage.SetResolution(r, r)
        Return nouvImage
    End Function
    Private Sub RedimensionnerImage(ByRef cheminOrigine As String, ByRef cheminDestination As String, ByVal largeur As Integer, ByVal hauteur As Integer, ByVal resolution As Integer)
        'crée un Bitmap à partir de l'image d'origine
        Dim imageSource As New Bitmap(cheminOrigine)
        'crée un Bitmap avec la nouvelle taille (il est possible de spécifier un facteur de redimensionnement à la place d'une taille)
        Dim bp As New Bitmap(largeur, hauteur)
        Dim gr As Graphics = Graphics.FromImage(bp)
        'copie l'image source dans la nouvelle image
        gr.DrawImage(imageSource, 0, 0, bp.Width + 1, bp.Height + 1)
        bp.SetResolution(resolution, resolution) 'résolution de l'image originale
        'sauvegarde le tout (ici en jpeg)
        bp.Save(cheminDestination, ImageFormat.Jpeg)
    End Sub
    Private Sub dimension() 'dimension Panel
        If paysage = True Then
            Panel1.Width = 419
            Panel1.Height = 319
            Me.Width = 470
            Me.Height = 450
        Else
            paysage = False
            Panel1.Width = 319
            Panel1.Height = 419
            Me.Width = 370
            Me.Height = 550
        End If
    End Sub
#End Region
#Region "PictureBox"
    Private Sub PictureBox_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        If e.Button = Windows.Forms.MouseButtons.Left Then
            x = e.X
            y = e.Y
        End If
    End Sub

    Private Sub PictureBox_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        If e.Button = Windows.Forms.MouseButtons.Left Then
            sender.Left += (e.X - x)
            sender.Top += (e.Y - y)
        End If
    End Sub
    Private Sub PictureBox_DoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)
        ' On récupère le contrôle cliqué ...
        Dim pictTmp As PictureBox = DirectCast(sender, PictureBox)
        MsgBox(pictTmp.Name)
    End Sub
#End Region
End Class


Ce code est à adapter pour d'autre cas de figure.

Bonne programmation
cs_Le Pivert 5067 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 23 avril 2018 Dernière intervention - 3 mars 2016 à 15:38
J'ai oublié de dire, que l'on peut aussi déplacer les PictureBox d'un cliquer glisser.

@+
cs_Le Pivert 5067 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 23 avril 2018 Dernière intervention - 4 mars 2016 à 09:37
Pour ceux que cela intéresse, voir ici un exemple avec un découpage en 12 ou 20 parties, avec l'enregistrement de ces parties d’image:

http://codes-sources.commentcamarche.net/source/101385-decouper-une-image

@+ Le Pivert
Commenter la réponse de cs_Le Pivert
Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention - 3 mars 2016 à 14:33
0
Utile
1
Bonjour Ucfoutu, bonjour neyja.
Toutes les suggestions utilisant
PaintEventArgs
conduisent à des erreurs, alors que le remplacement de
e.Graphics
par le
CreateGraphics
du support de dessin suffit. Mais je dois encore mettre cela en ordre. D'autre part, je voudrais savoir si le Vb 2008 possède un explorateur d'objets.
Cordialement
Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention - 3 mars 2016 à 16:36
Là, il va falloir choisir.
Commenter la réponse de Zermelo
Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention - 4 mars 2016 à 09:22
0
Utile
Bonjour Ucfoutu, bonjour neyja.

Voici le petit travail que je vous ai promis.

Imports System.Drawing
Public Class Accueil
Private Chm As String, ImgO As Image

Private Sub bOuv_Click(ByVal sender As Object, ByVal e As EventArgs) Handles bOuv.Click
'Acquisition de l'image d'origine ImgO dans le PictureBox pBox.
'DlgOuvrir est un contrôle OpenDialog (filtre Bmp, jpg, gif).
'L'image ImgO est stockée dans l'ordinateur à l'état de fichier.
Dim Ok As Boolean
With DlgOuvrir
.ShowDialog()
Ok = (.ShowDialog = DialogResult.OK)
If Ok Then
Chm = .FileName : ImgO = Image.FromFile(Chm)
pBox.Image = Image.FromFile(Chm)
End If
End With
'Code de Graphics.DrawImage, méthode (Image, Int32, Int32, Rectangle, GraphicsUnit)
Dim x As Integer = 100
Dim y As Integer = 100
Dim srcRect As New Rectangle(50, 50, 150, 150)
Dim units As GraphicsUnit = GraphicsUnit.Pixel
pBox.CreateGraphics.DrawImage(ImgO, x, y, srcRect, units)
'L'exécution de ce code est censée produire une image extraite de l'image d'origine ImgO.
'Mais dans l'état actuel le test n'est pas possible, car l'image potentiellement extraite
'est alors devant l'image d'origine.
'Bon courage mes amis!
End Sub

Cordialement.
Commenter la réponse de Zermelo
Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention - 4 mars 2016 à 12:19
0
Utile
1
Bonjour Ucfoutu.
Y-a-il quelque chose à dire ?
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 4 mars 2016 à 13:07
Non ! sauf que je trouve que vous êtes tous merveilleux.
Je ne peux tester, n'ayant pas VB.Net, mais je sais "voir" que toutes vos solutions VB.Net méritent respect.
Merci de vous y être mis.
Commenter la réponse de Zermelo
0
Utile
Merci à tous je vais m'entrainer avec CreateGraphics.DrawImage.

A la base je pensais ne pas passer par des fonctions traitants directement les images mais plutôt passer par une conversion en memorystream puis une division du memorystream avant de le ré assembler, est-ce possible ?

Merci à tous pour votre aide et ne m'en veuiller pas pour pour mon temps de réponse je n'ai pas beaucoup de temps pour aller sur l'ordinateur ces temps ci.
Bonne soirée =)
Commenter la réponse de neyja
Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention - 8 mars 2016 à 16:28
0
Utile
3
Bonjour neyja.
Je vous ai demandé si votre Vb 2008 possède un explorateur d'objets, et vous ne m'avez pas répondu.
Si vous êtes trop occupé, veuillez me le faire savoir pour que je me désintéresse de votre sujet.
Cordialement.
Autant pour moi, oui il y a bien un explorateur d'objets.
Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention > neyja - 9 mars 2016 à 08:16
Alors je vous conseille de l'ouvrir, de sélectionner la classe Graphics, puis méditer sur toutes les méthodes DrawImage qui s'y trouvent. C'est un excellent exercice.
Par ailleurs, pendant que je vous tiens, je vous suggère fortement d'ouvrir le lien que je vous avais donné au tout début de cette discussion. Figurez-vous, est-ce drôle, que la solution s'y trouve.
Bonne journée.

Coucou
Oui je vous rassure j'avais déjà regardé merci pour le partage.

Comme je disais je vais m'entrainer avec cette méthode

pBox.PointToScreen()
New Bitmap(Dlm.dx, Dlm.dy)
GrpA.DrawRectangle()
g.CopyFromScreen()


Je me demandais donc si une autre méthode consistant à diviser le memorystream d'un bitmap était possible après l'avoir converti par ce biais :

Dim ms As New MemoryStream
Bitmap.Save(ms, Bitmap.RawFormat)

Bonne journéeé merci pour votre aide
Commenter la réponse de Zermelo
Zermelo 378 Messages postés samedi 22 septembre 2012Date d'inscription 13 août 2017 Dernière intervention - 11 mars 2016 à 16:20
0
Utile
Bonjour neyja.
Avancez-vous comme vous le souhaitez ?
Cordialement.
Commenter la réponse de Zermelo
0
Utile
bonjour,
je suis débutant et je me lance dans le traitement d'image, pour optimiser la vitesse d’exécution du traitement des image, je pence découper l'image en plusieurs blocs pour traiter simultanément chaque bloc en multi-thread puis la ré-assemblé.
Pour cela j'aimerais savoir si pour découper une image il est plus rapide d'utiliser bitmap.clone ou de parcourir chaque pixel en utilisant lockbits ?
Commenter la réponse de Ulrick
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 12 mars 2016 à 14:46
0
Utile
Bonjour, Ulrick

Ouvre ta propre discussion à ce sujet, qui n'est pas exactement le même
Commenter la réponse de ucfoutu

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.