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 :

Bitmap en niveau de Gris / Dll -> HBitMap


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 8
    Par défaut Bitmap en niveau de Gris / Dll -> HBitMap
    Bonjour à tous,

    J'utilise une DLL qui me renvoie un Hbitmap sur une image BMP en niveau de Gris.

    Dans un premier temps voici ce que j'ai réussi à pondre en fouillant sur le forum. Ceci fonctionne très bien pour visualiser mon image et l'enregistrer, cependant, mon image une fois enregistrée fait a peu près le triple de sa taille normale ( car l'image renvoyée par la dll est en niveau de gris codée sur 1 octet par pixel ), je pense que l'image est retransformée en RVB en récupérant l'image via le Clipboard.

    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
     'open the clipboard
        OpenClipboard imgCheque.hwnd
        'Clear the clipboard
        EmptyClipboard
        'Put our bitmap onto the clipboard
        SetClipboardData CF_BITMAP, BmpFront
        'Check if there's a bitmap on the clipboard
        If IsClipboardFormatAvailable(CF_BITMAP) = 0 Then
            MsgBox "There was an error while pasting the bitmap to the clipboard!"
        End If
     
        'Close the clipboard
        CloseClipboard
     
        'Get the picture from the clipboard
        imgCheque.Picture = Clipboard.GetData(vbCFBitmap)
     
       SavePicture  imgCheque.Picture, "F:\Projets Borland Studio\DLL\BIN\images\Ftest.bmp"
    alors j'ai fini par faire ce qu'il y a ci-dessous mais impossible delire les données de mon image ... je pense que le problème est liée au codage de l'image (1octet par pixel) et que la fonction GetDIBits ne sait pas l'interpréter. Autrement, lorsque j'utilise la fonction GetObjectApi, je retrouve les bonnes dimensions de mon image dans ma structure PicInfo.

    BmpFront est mon hBitmap retourné par la DLL.

    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
     
      Dim Buffer() As RGBQUAD
      Dim PicInfo As BITMAPINFOHEADER
      Dim Width As Long
      Dim Height As Long
     
      Dim Src_hDc As Long
      Dim hDCScn As Long
      Dim OldObj As Long
     
      Dim BMPINFO As BITMAPINFO
      Dim BMPINFOH As BITMAPINFOHEADER
     
      GetObjectApi BmpFront, Len(PicInfo), PicInfo
      Width = PicInfo.biWidth
      Height = PicInfo.biHeight
     
      hDCScn = CreateDCAsNull("DISPLAY", ByVal 0&, ByVal 0&, ByVal 0&)
      Src_hDc = CreateCompatibleDC(hDCScn)
      OldObj = SelectObject(Src_hDc, BmpFront)
      ReDim Buffer(0 To Width - 1, 0 To Height - 1)
     
      GetDIBits Src_hDc, BmpFront, 0, Height, Buffer(0, 0), BMPINFO, 0

    Alors voici mes questions : comment est t'il possible d'enregistrer un HBitMap directement sur le disque dur ? Si ce n'est pas le cas, comment est ce que je peux enregistrer mon fichier bmp sur disque ? ( j'ai aussi essayé de passer par un fichier binaire en pasant mon HBitmap mais ca ne fonctionne pas non plus )

    Merci à tous pour vos conseils, il y a encore des concepts VB qui m'échappent j'en fais que depuis une semaine.

  2. #2
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Ton code ne nous permet pas d'y voir clair si tu ne précises pas le type de ton contrôle imgCheque (contrôle image ou picturebox ?)

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 8
    Par défaut
    Oui en effet, j'ai oublié de préciser, imgCheque est un pictureBox, mais le code utilisant imgcheque fonctionne. Mon problème est de sauver directement mon image sur le disque dur sans passer par le Clipboard. Je pense

    merci,

  4. #4
    Membre éprouvé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 336
    Par défaut
    salut

    avec SavePicture

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SavePicture Picture1.image, Chemin de destination
    EDIT:

    je ne vois pas le rapport avec ton titre...

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 8
    Par défaut
    bonjour,

    le rapport avec le titre est ecrit dans la 1er message, j'ai déjà essayé cette solution à partir de mon Hbitmap retourné par la dll que j'utilise mais ca ne fonctionne pas.


    merci.

  6. #6
    Membre éprouvé
    Avatar de Asdorve
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 336
    Par défaut
    Mille excuse, j'ai dû bugger sur une ligne...

    mais tu as essayé ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'Get the picture from the clipboard
        imgCheque.Picture = Clipboard.GetData(vbCFBitmap)
    imgCheque.Picture = imgCheque.image
       SavePicture  imgCheque.Picture, "F:\Projets Borland Studio\DLL\BIN\images\Ftest.bmp"
    sans grande conviction vu que ton pb a l'air plus compliqué..

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

Discussions similaires

  1. Transformer une Bitmap RGB en niveau de gris
    Par mathylde dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 23/07/2009, 10h43
  2. Réponses: 8
    Dernier message: 17/04/2005, 19h58
  3. Image en niveau de gris
    Par SteelBox dans le forum C++Builder
    Réponses: 3
    Dernier message: 13/10/2003, 17h04
  4. conversion bmp en niveau de gris
    Par hholivier dans le forum C++Builder
    Réponses: 6
    Dernier message: 19/06/2003, 13h34
  5. niveau de gris en niveau de couleur
    Par corey_jx dans le forum MFC
    Réponses: 2
    Dernier message: 11/06/2003, 22h36

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