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 6 et antérieur Discussion :

problème avec paintpicture et bitblt


Sujet :

VB 6 et antérieur

  1. #1
    Membre habitué
    Avatar de nabil
    Inscrit en
    Avril 2002
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 223
    Points : 168
    Points
    168
    Par défaut problème avec paintpicture et bitblt
    salut tous le monde,
    j'en ai écrit ce code :
    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
    Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
     
     
    Private Sub Command1_Click()
    Picture1.PaintPicture Image1.Picture, 0, 0, Picture1.Width, Picture1.Height
        Dim sDC As Long
        Dim path1, path2 As String
        path1 = "c:\image\test.bmp"
        With Picture1
            sDC = .hDC
            BitBlt .hDC, 0, 0, .ScaleWidth, .ScaleHeight, sDC, 0, 0, vbSrcCopy
            SavePicture .Image, path1
        End With
     
    End Sub
    mais j'obtient comme résultat un fichier contenant le fond du picturebox [une image grise]comment pourai-je faire pour obtenir l'image.
    j'en ai déjà lu une solution de ce problème mais je ne me rappelle plus ou ni comment faire.
    Il ne faut jamais désesperer, il y a toujours une solution.

  2. #2
    Membre habitué
    Avatar de nabil
    Inscrit en
    Avril 2002
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 223
    Points : 168
    Points
    168
    Par défaut
    aucune idée : : :
    Il ne faut jamais désesperer, il y a toujours une solution.

  3. #3
    Membre habitué
    Avatar de nabil
    Inscrit en
    Avril 2002
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 223
    Points : 168
    Points
    168
    Par défaut
    bon j'ai changer le controle image avec le controle picturebox avec la propriété autosize à true et j'ai écrit ce code:
    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
    Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
    Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
    Dim hMemoryDC As Long
        Picture1.ScaleMode = vbPixels
        Picture2.ScaleMode = vbPixels
     
        Dim sDC As Long
        Dim path1, path2 As String
        path1 = "c:\image\res1.bmp"
        hMemoryDC = CreateCompatibleDC(Picture2.hdc)
        hOldBitMap = SelectObject(hMemoryDC, Picture2.Picture)
        StretchBlt Picture1.hdc, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, hMemoryDC, 0, 0, Picture2.ScaleWidth, Picture2.ScaleHeight, vbSrcCopy
        hOldBitMap = SelectObject(hMemoryDC, hOldBitMap)
        DeleteDC hMemoryDC
        SavePicture Picture1.Image, path1
    bon ca donne l'image souhaité avec la taille souhaité (celle de picture1) mais avec une qualité médiocre.
    pourquoi le stretchblt ne marche pas nickel dans ce cas ?????
    Il ne faut jamais désesperer, il y a toujours une solution.

  4. #4
    Membre habitué
    Avatar de nabil
    Inscrit en
    Avril 2002
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 223
    Points : 168
    Points
    168
    Par défaut
    à priori aucune personne ne s'interesse à mes problèmes
    Il ne faut jamais désesperer, il y a toujours une solution.

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Si si... Mais malheureusement je suis en VBA... et en VBA, pour placer une image dans une picture, c'est beaucoup plus simple...

    MaForm.MonImage.Picture = LoadPicture("D:\clipart\Dessins\"D:\clipart\Divers\Statue.bmp")

    Alors je ne comprends pas ton problème...

    Mais comme ça, tu sais que nous ne sommes pas encore tous en week-end...

    Bonne chance

  6. #6
    Membre habitué
    Avatar de nabil
    Inscrit en
    Avril 2002
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 223
    Points : 168
    Points
    168
    Par défaut
    loadpicture ne fait que de chargé l'image dans le picturebox sans aucun ajustement de lalargeur et la hauteur.
    mais stretchblt fait un stretch de l'image.
    Mon soucis est de redimensionner l'image dans une taille spécifique tout en gardant une bonne qualité
    Il ne faut jamais désesperer, il y a toujours une solution.

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Je me doute que tu as pensé à ce "je ferais"... mais...

    Je mettrais Autosize à true
    Je prendrais la taille du bmp une fois collé dans le picture, et ensuite je redimensionnerais la largeur en fonction de la hauteur que tu souhaites et enfin... tu n'aurais plus à faire le stretch

    Largeur = LargeurActuelle * HauteurVoulue / Hauteur actuelle

    Si ça peut te sortir de l'ornière...

    A+

  8. #8
    Membre éprouvé
    Avatar de ridan
    Inscrit en
    Avril 2003
    Messages
    710
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2003
    Messages : 710
    Points : 1 126
    Points
    1 126
    Par défaut
    Solution plus simple et qui donne de bons résultats :

    http://www.developpez.net/forums/vie...173174#2173174
    @ bientôt

    :: Ressources VB : Cours | FAQ | Sources et surtout La recherche sur le forum

    :: Pour un forum plus propre ...

  9. #9
    Membre habitué
    Avatar de nabil
    Inscrit en
    Avril 2002
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 223
    Points : 168
    Points
    168
    Par défaut
    tout d'abord merci
    tu sais ridan j'en ai tester ce code une fois mais ca n'a pas marché, peux être que j'était pas trés bien concentré.
    de toute maniére merci.
    Une seule question picture1.move sert à quoi faire dans ce code ??ca marche sans cette ligne de code
    Il ne faut jamais désesperer, il y a toujours une solution.

  10. #10
    Membre éprouvé
    Avatar de ridan
    Inscrit en
    Avril 2003
    Messages
    710
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2003
    Messages : 710
    Points : 1 126
    Points
    1 126
    Par défaut
    Citation Envoyé par nabil
    Une seule question picture1.move sert à quoi faire dans ce code ??ca marche sans cette ligne de code
    Définir la position (Top, Left) et les dimensions de l'image, tu peux éventuellement écrire ça en deux lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Picture1.Width = LdImage.Width * 0.2
        Picture1.Height = LdImage.Height * 0.2
    Bon courage

    A+
    @ bientôt

    :: Ressources VB : Cours | FAQ | Sources et surtout La recherche sur le forum

    :: Pour un forum plus propre ...

  11. #11
    Membre habitué
    Avatar de nabil
    Inscrit en
    Avril 2002
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 223
    Points : 168
    Points
    168
    Par défaut
    merci ridan pour ton explication
    Il ne faut jamais désesperer, il y a toujours une solution.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec BitBlt
    Par Gunadorio dans le forum MFC
    Réponses: 4
    Dernier message: 22/07/2003, 18h52
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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