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 :

Petit souci de bande noire capture d'image


Sujet :

VB.NET

  1. #1
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Points : 145
    Points
    145
    Par défaut Petit souci de bande noire capture d'image
    Bonjour
    J'ai une appli qui utilise une capture d'ecran pour ensuite sauvegarder cette capture en jpg.
    Le size du form a capturer est : 745; 1035


    ci joint le morceau du classimpression qui traite de la capture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     Private Function Capturectrl(ByVal ctrl As Control) As Bitmap
            Dim memoryImage As Bitmap
            Dim mygraphics As Graphics = ctrl.CreateGraphics()
            Dim s As Size = ctrl.Size
            memoryImage = New Bitmap(s.Width - 3, s.Height - (SystemInformation.FrameBorderSize.Width + 3 + SystemInformation.CaptionHeight), mygraphics)
            Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
            Dim dc1 As IntPtr = mygraphics.GetHdc
            Dim dc2 As IntPtr = memoryGraphics.GetHdc
            StretchBlt(dc2, 0, 0, ctrl.ClientRectangle.Width, _
               ctrl.ClientRectangle.Height, dc1, 0, 0, 13369376)
            mygraphics.ReleaseHdc(dc1)
            memoryGraphics.ReleaseHdc(dc2)
            Return memoryImage
        End Function
    Mon souci :
    J'obtient une bande noire sur le jpeg capturé en bas et a droite de l'image comme ceci :


    un peu comme si l'image avait été bien capturée mais que le "fond" du jpeg était noir

    De quoi cela peut il venir d'après vous ?
    Merci

  2. #2
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Points : 145
    Points
    145
    Par défaut
    pas d'idée ?
    je cherche depuis 1 semaine et rien trouvé de probant

  3. #3
    Membre expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut
    Je n'y connais grand chose mais une piste :
    Quel est là taille de l'image final ? Il y a peut être une différence de taille entre l'image capturé et la taille du cadre.

  4. #4
    Membre habitué
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2005
    Messages : 608
    Points : 145
    Points
    145
    Par défaut
    très franchement je ne sais pas quoi répondre
    le form fait exactement 745X1035 et je ne fais juste que la coller sur un nouveau document que j'enregistre automatiquement en jpeg. De plus je vois que l'image n'est pas centrée sur le jpeg.

  5. #5
    Membre expérimenté Avatar de Uranne-jimmy
    Homme Profil pro
    Bioinformatique
    Inscrit en
    Décembre 2012
    Messages
    778
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Bioinformatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 778
    Points : 1 461
    Points
    1 461
    Par défaut
    Si le problème n'est pas au collage, j'imagine qu'il doit l'être au moment de la prise d'écran. A un moment tu soustraits tes dimensions, ça pourrait venir de là ?

    Quand au centrage : par défaut c'est le coin en haut à gauche qui sert d'origine donc c'est normal, non?

    Mais il y a un truc que je comprends pas : tu créés une variable de type graphics, que tu changes en bitmap, puis rechange en graphics, avec dans le premier changement une diminution de la taille d'ailleurs ? Pourquoi se transvasement ?

  6. #6
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour

    Mais Attila ne put resister à son instinct naturel de raser tout...

    Si tu utilise Control.Size(taille exterieure du control) qui inclut le FrameBorder et le CaptionHeight pour un form....tes deboires proviennent du fait que :
    - le width du bitmap devrait etre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    memoryImage = New Bitmap(s.Width - (SystemInformation.FrameBorderSize.Width + 3), s.Height - (SystemInformation.FrameBorderSize.Width + 3 + SystemInformation.CaptionHeight), mygraphics)
    C'est la bande noire que tu vois..........

    tout le code avec ta version Control.Size:
    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
     
     Private Function Capturectrl(ByVal ctrl As Control) As Bitmap
            Dim memoryImage As Bitmap
            Dim mygraphics As Graphics = ctrl.CreateGraphics()
            Dim s As Size = ctrl.Size
     
            'ici le width corrige
            memoryImage = New Bitmap(s.Width - (SystemInformation.FrameBorderSize.Width + 3), s.Height - (SystemInformation.FrameBorderSize.Width + 3 + SystemInformation.CaptionHeight), mygraphics)
     
            Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
            Dim dcSrc As IntPtr = mygraphics.GetHdc
            Dim dcDest As IntPtr = memoryGraphics.GetHdc
            StretchBlt(dcDest, 0, 0, ctrl.ClientSize.Width, ctrl.ClientSize.Height,
                         dcSrc, 0, 0, memoryImage.Width, memoryImage.Height,
                         TernaryRasterOperations.SRCCOPY)
            mygraphics.ReleaseHdc(dcSrc)
            memoryGraphics.ReleaseHdc(dcDest)
            Return memoryImage
        End Function
         <DllImport("gdi32.dll")> _
        Private Shared Function StretchBlt(ByVal hdcDest As IntPtr, ByVal nXOriginDest As Integer, ByVal nYOriginDest As Integer, ByVal nWidthDest As Integer, ByVal nHeightDest As Integer, ByVal hdcSrc As IntPtr, ByVal nXOriginSrc As Integer, ByVal nYOriginSrc As Integer, ByVal nWidthSrc As Integer, ByVal nHeightSrc As Integer, ByVal dwRop As TernaryRasterOperations) As Boolean
        End Function
    Public Enum TernaryRasterOperations
     
            SRCCOPY = &HCC0020 ' dest = source*/
            SRCPAINT = &HEE0086 ' dest = source OR dest*/
            SRCAND = &H8800C6 ' dest = source AND dest*/
            SRCINVERT = &H660046 ' dest = source XOR dest*/
            SRCERASE = &H440328 ' dest = source AND (NOT dest )*/
            NOTSRCCOPY = &H330008 ' dest = (NOT source)*/
            NOTSRCERASE = &H1100A6 ' dest = (NOT src) AND (NOT dest) */
            MERGECOPY = &HC000CA ' dest = (source AND pattern)*/
            MERGEPAINT = &HBB0226 ' dest = (NOT source) OR dest*/
            PATCOPY = &HF00021 ' dest = pattern*/
            PATPAINT = &HFB0A09 ' dest = DPSnoo*/
            PATINVERT = &H5A0049 ' dest = pattern XOR dest*/
            DSTINVERT = &H550009 ' dest = (NOT dest)*/
            BLACKNESS = &H42 ' dest = BLACK*/
            WHITENESS = &HFF0062 ' dest = WHITE*/
        End Enum
    Mais vu ce que tu cherches il aurait ete plus simple d'utiliser Control.ClientSize,qui ne comprend ni la bordure,ni captionheight,ni scrollbars... pour un form.
    MSDN Doc:
    The client area of a control is the bounds of the control, minus the nonclient elements such as scroll bars, borders, title bars, and menus
    code avec Control.ClientSize:

    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
     
       Private Function CapturectrlClientSize(ByVal ctrl As Control) As Bitmap
            Dim memoryImage As Bitmap
            Dim mygraphics As Graphics = ctrl.CreateGraphics()
     
            'ici le nouveau width plus simple
     
            Dim s As Size = ctrl.ClientSize
            memoryImage = New Bitmap(s.Width - 3, s.Height - 3, mygraphics)
            Dim memoryGraphics As Graphics = Graphics.FromImage(memoryImage)
            Dim dcSrc As IntPtr = mygraphics.GetHdc
            Dim dcDest As IntPtr = memoryGraphics.GetHdc
            StretchBlt(dcDest, 0, 0, ctrl.ClientSize.Width, ctrl.ClientSize.Height,
                       dcSrc, 0, 0, memoryImage.Width, memoryImage.Height,
                       TernaryRasterOperations.SRCCOPY)
            mygraphics.ReleaseHdc(dcSrc)
            memoryGraphics.ReleaseHdc(dcDest)
            Return memoryImage
        End Function
    bon code....

Discussions similaires

  1. [WD14] Souci de Haut de page et bande noire
    Par Baboulinet_ dans le forum WinDev
    Réponses: 20
    Dernier message: 12/12/2012, 15h26
  2. Petit soucis pour insérer une image dans un userform uniquement
    Par panda78 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 27/07/2012, 11h50
  3. Petit soucis, taille image
    Par olivier L dans le forum Images
    Réponses: 4
    Dernier message: 03/03/2010, 11h57
  4. [W3C] petit soucis d'alignement d'image..
    Par audax dans le forum Balisage (X)HTML et validation W3C
    Réponses: 13
    Dernier message: 01/02/2006, 00h10
  5. Capture d image par webcam
    Par moimoimoi3x dans le forum C++Builder
    Réponses: 7
    Dernier message: 03/07/2003, 08h48

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