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

Access Discussion :

Dessiner sous MS Access - AccessPaint


Sujet :

Access

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Dessiner sous MS Access - AccessPaint
    Bonjour à tous,

    J'ai récupéré le code présent sur le site mais au lieu de sauvegarder mon dessin dans un bmp, je souhaiterai le convertir automatiquement au format jpeg (gain de place sur le disque). Ceci est pour géré des signatures de clients via tablettes PC.

    Est-ce possible? Merci d'avance pour vos réponses.

  2. #2
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    pour la sauvegarde en format BITMAP j'utilise les API Windows, je crains bien que la conversion en JPEG/GIF/PNG nécessite l'utilisation d'une dll.

    reste à voir si cela est disponible en cherchant sur Google.

  3. #3
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    Slt,

    Une solution pour le Jpeg c'est Gdi plus (y a d'autres dll qui traînent sur le net mais j'arrive pas à les faire fonctionner à partir d'access).
    C'est un truc à microsoft que tu peux trouver ici :
    http://www.microsoft.com/downloads/d...DisplayLang=en

    Sous XP c'est déjà intégré.
    Pour les autres systèmes c'est juste une dll (Gdiplus.dll) qui s'installe dans le répertoire système (\windows\system32).

    Bon c'est pas ce qu'il y a de plus simple à programmer mais :
    - ça nécessite ça en déclarations :
    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
    ' GDI Plus
    Private Declare Function GdiplusStartup Lib "GDIPlus" (token As Long, LInput As GdiplusStartupInput, Optional ByVal lOutPut As Long = 0) As Long
    Private Declare Function GdiplusShutdown Lib "GDIPlus" (ByVal token As Long) As Long
    Private Declare Function GdipCreateBitmapFromHBITMAP Lib "GDIPlus" (ByVal hbm As Long, ByVal hpal As Long, Bitmap As Long) As Long
    Private Declare Function GdipDisposeImage Lib "GDIPlus" (ByVal image As Long) As Long
    Private Declare Function GdipSaveImageToFile Lib "GDIPlus" (ByVal image As Long, ByVal FileName As Long, clsidEncoder As GUID, encoderParams As Any) As Long
    Private Declare Function CLSIDFromString Lib "ole32" (ByVal str As Long, id As GUID) As Long
    ' Types pour Gdi+
    Private Type GUID
        Data1 As Long
        Data2 As Integer
        Data3 As Integer
        Data4(0 To 7) As Byte
    End Type
    Private Type GdiplusStartupInput
        GdiplusVersion As Long
        DebugEventCallback As Long
        SuppressBackgroundThread As Long
        SuppressExternalCodecs As Long
    End Type
    Private Type EncoderParameter
        GUID As GUID
        NumberOfValues As Long
    Type As Long
        Value As Long
    End Type
    Private Type EncoderParameters
        Count As Long
        Parameter(15) As EncoderParameter
    End Type
    Et il faut mettre ça dans la fonction ShiftImprimEcran à la place de l'ancien code de création du fichier Bmp :

    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
    '---------------------------------------------------------------------------------------
    ' Sauvegarde vers un fichier Jpeg
    '---------------------------------------------------------------------------------------
    ' pFile     : Chemin du fichier
    ' pQuality  : Quality du fichier (0-100)
    '---------------------------------------------------------------------------------------
    Public Function SaveToJpg(ByVal pFile As String, Optional ByVal pQuality As Byte = 80) As Boolean
    ' Source : http://www.activevb.de/tipps/vb6tipps/tipp0663.html
        Dim lGdiPSI As GdiplusStartupInput
        Dim lRet As Long
        Dim lGdipToken As Long
        Dim lBitmap As Long
        Dim lJpgEncoder As GUID
        Dim lParams As EncoderParameters
        Const lJpegEncoderStr As String = "{557CF401-1A04-11D3-9A73-0000F81EF32E}"
        Const lQualityParamStr As String = "{1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB}"
     
        On Error GoTo Gestion_Erreurs:
        ' Initialisation GDI + version 1
        lGdiPSI.GdiplusVersion = 1
        lRet = GdiplusStartup(lGdipToken, lGdiPSI)
        If lRet = 0 Then
            ' Création d'un Bitmap Gdi+ à partir du bitmap de l'image
            lRet = GdipCreateBitmapFromHBITMAP(gDIB.hDIB, 0, lBitmap)
            If lRet = 0 Then
                ' Recherche de l'encodeur Jpeg
                CLSIDFromString StrPtr(lJpegEncoderStr), lJpgEncoder
                ' Paramètre de l'encodeur Jpeg
                lParams.Count = 1
                With lParams.Parameter(0)
                    ' Paramètrage de la qualité (0-100)
                    CLSIDFromString StrPtr(lQualityParamStr), .GUID
                    .NumberOfValues = 1
                    .Type = 4 ' Type Long
                    .Value = VarPtr(pQuality)
                End With
                ' Sauvegarde l'image
                lRet = GdipSaveImageToFile(lBitmap, StrPtr(pFile), lJpgEncoder, lParams)
                ' Supprime le bitmap
                GdipDisposeImage lBitmap
            End If
            ' Ferme Gdi+
            GdiplusShutdown lGdipToken
        End If
    Gestion_Erreurs:
        If Err.Number = 0 And Not lRet Then SaveToJpg = True ' renvoie vrai si pas d'erreur et fichier correctement créé
    End Function
    En remplaçant gDIB.hDIB par le DIB de cafeine, ç-à-d lngHBmp

    J'ai testé sous XP ça marche bien.

    Bye.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Salut,
    Merci pour votre réponse rapide.
    J'ai été agréablement surpris ce matin.

    Arkham, j'ai essayé ta solution.
    Pour gdiplus.dll , je l'ai placé à la racine de ma base et charge la librairie à l'ouverture de mon appli donc cela marchera sans me soucier si dll déjà présente dans le système d'exploitation.

    Par contre, il me fournit en résultat dans mon jpeg, un écran tout noir sans prise en compte de mes talents d'artiste.

    Dans ta fonction SaveToJpg, j'ai remplacé gDIB.hDIB par lngHBmp. A quel moment dans ShiftImprimEcran fais-tu appel à SaveToJpg.

    Merci d'avance.

  5. #5
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    salut,

    c'est à la place de ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    'Crée l'entête du fichier bmp
    With bmfBitmapFileHeader
      .bfType = &H4D42&
    .....
    Finally:
    'Ferme le fichier si ouvert
    If bolOuvert Then Close lngFnum
    Chez moi gDIB.hDIB est une variable globale, donc si tu conserves la fonction il faut y rajouter le lngHBmp en paramètre.
    Sinon tu mets le contenu de la fonction à la place du code ci-dessus.
    Y a juste à décaler l'étiquette <Finally:> juste avant <'Supprime les objets>

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    It's perfect.

    Merci beaucoup Arkham.
    Je vais peaufiner tout ça.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Cher Caféine,
    Juste une question, la zone "dessinable" dans mon cadre image est instable si on change l'emplacement de la fenêtre ou si l'on place la zone n'importe où sur le formulaire. Comment rendre dynamique la prise en compte des positions du cadre image pour prévoir toutes les manipulations possibles de l'utilisateur.

    Merci d'avance.

  8. #8
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    il faudrait redéfinir le devicecontext de dessin lors de l'événement de redimensionnement / mouvement de la fenêtre ...

Discussions similaires

  1. formulaire et sous formulaire access (vba access)
    Par alexkickstand dans le forum Access
    Réponses: 3
    Dernier message: 21/04/2006, 19h11
  2. Probléme de raffraichissement sous formulaire access
    Par roadster62 dans le forum Access
    Réponses: 4
    Dernier message: 27/03/2006, 16h44
  3. dessiner sous access
    Par fthem dans le forum Access
    Réponses: 1
    Dernier message: 12/01/2006, 18h35
  4. [liste déroulante et sous-formulaire] access 2003
    Par techinfo37 dans le forum Access
    Réponses: 6
    Dernier message: 24/12/2005, 15h14
  5. Chemin d'accès sous-feuilles ACCESS
    Par FREDASTER dans le forum Access
    Réponses: 6
    Dernier message: 13/12/2005, 19h54

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