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

WinDev Discussion :

Contour d'un texte ajouté sur une image avec dTexte


Sujet :

WinDev

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 51
    Points : 45
    Points
    45
    Par défaut Contour d'un texte ajouté sur une image avec dTexte
    Bonjour,

    J'ai un texte blanc que j'ai ajouté sur une image avec la fonction dTexte. J'aimerais faire ressortir ce texte et donc lui ajouter un contour noir fin mais je ne vois pas comment faire.

    Voici mon code actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    PROCEDURE Proc_Construire_Image(frameBase, texteImage)
     
    frameBaseTmp est une Image = dChargeImage(frameBase)
     
    // Ajout du texte sur l'image
    dDébutDessin(frameBaseTmp)
    dPolice("Arial",10,iGras)
    dTexte(36,10,texteImage,iBlanc)
    RENVOYER frameBaseTmp
    Merci d'avance

  2. #2
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 308
    Points : 9 417
    Points
    9 417
    Par défaut
    Une astuce est d'écrire ton texte 2 fois : une en gras (noir) et une en normal (blanc). Au moins ton texte sera bien cadré.

    Autre astuce : trouver une police "nativement" avec bordure (regarde sur dafont).

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 51
    Points : 45
    Points
    45
    Par défaut
    La première astuce ne fonctionne pas, le texte est décalé.

    Et pour la seconde solution, ce n'est pas possible. Les polices avec contour ont un intérieur transparent, pas blanc.

    Sinon, j'ai pensé à utiliser un libellé que je superpose à mon image de base mais le problème c'est que je dois sauver l'image finale en PNG.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    540
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 540
    Points : 940
    Points
    940
    Par défaut
    La même DLL que vous utilisez déjà, permet d'ajouter un texte en mode composé avec un effet d'ombrage qui facilite la lecture du texte en particulier sur fond clair, vous pouvez même utiliser une police privée (sans avoir besoin de l'installer au préalable).

    Exemple:

    Nom : annotation.png
Affichages : 309
Taille : 7,8 Ko

    ...

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    540
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 540
    Points : 940
    Points
    940
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CONSTANT
        GDImage               = "gdimage"
        METADATA_SIZE         = 2048
        StringAlignmentNear   = 0 // Text alignment
        StringAlignmentCenter = 1 // Text alignment
        StringAlignmentFar    = 2 // Text alignment
        ZS_VISIBLE            = 1
    END
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // To create a composited text object
    PROCEDURE ZI_CreateTextObject(zObjItem is ZOBJECT, LOCAL sUseText is string, LOCAL nX is int, LOCAL nY is int, LOCAL nW is int, LOCAL nH is int, LOCAL ColrARGB is int, LOCAL sUseFont is string, LOCAL nSize is int, LOCAL ZS_STYLE is int, LOCAL nUse3D is int, LOCAL nUseStrFormat is int)
    API(GDImage, "ZI_CreateTextObject", &zObjItem, sUseText, nX, nY, nW, nH, ColrARGB, sUseFont, nSize, ZS_STYLE, nUse3D, nUseStrFormat)
    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
    Obj is array of 4 ZOBJECT
    nX, nY, nW, nH, nUseW, nUseH, nFontSize, nUse3D is int
    sFileName, sUseFont is string
    
    sFileName = ExePath() + "1.png"
    hBitmap is system int = ZI_CreateBitmapFromFile(sFileName, nW, nH)
    IF (hBitmap) THEN
        ZI_CreateBitmapObject(Obj[1], 104, 0, hBitmap, ZD_ARGB(255, 0, 0, 0), ZS_VISIBLE)
      
        sFileName = ExePath() + "2.png";  hBitmap = ZI_CreateBitmapFromFile(sFileName, nUseW, nUseH)
        IF (hBitmap) THEN
            ZI_CreateBitmapObject(Obj[2], 0, 0, hBitmap, ZD_ARGB(255, 0, 0, 0), ZS_VISIBLE)
        
            sFileName = ExePath() + "3.png"; hBitmap = ZI_CreateBitmapFromFile(sFileName, nW, nH)
            IF (hBitmap) THEN
                ZI_CreateBitmapObject(Obj[3], 189, 6, hBitmap, ZD_ARGB(255, 0, 0, 0), ZS_VISIBLE)
          
                nFontSize = 20; sUseFont = "Tahoma"
                nX = 34; nY = 4; nUse3D = -1
                ZI_CreateTextObject(Obj[4], "Annotation", nX, nY, nUseW - nX, nUseH, ZD_ARGB(255, 255, 255, 255), sUseFont, nFontSize, ZS_VISIBLE, nUse3D, StringAlignmentNear)
          
                //ZI_CreateImageComposited(ExePath() + "compo.png", nUseW, nUseH, Obj)
                hBitmap = ZI_CreateImageComposited("", nUseW, nUseH, Obj)
                IF (hBitmap) THEN 
                    sFileName = ExePath() + "compo.png"
                    ZI_SaveBitmapToFile(sFileName, hBitmap, 0)
                    DeleteObject(hBitmap)
                    IMG_Result = sFileName
                END
    
            END
    
        END
    
    END

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 51
    Points : 45
    Points
    45
    Par défaut
    Merci pour le coup de main. Cependant, contrairement à la fonction précédente qui était dédiée au développeur, celle-ci est dédiée aux utilisateurs. Or, utiliser GDImage ici me ferait afficher la popup crédits de la DLL environ 30 fois de suite. Comme je vous le disais, je ne peux malheureusement pas acheter la DLL par manque de moyens donc je ne peux pas l'utiliser pour cette fonctionnalité.

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    540
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 540
    Points : 940
    Points
    940
    Par défaut
    La popup ne s'affiche qu'une seule fois, et vous pouvez l'afficher au démarrage pour l'oublier ensuite, en faisant en début de projet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    IF (LoadDLL(GDImage)) THEN
        // We must initialize GDImage using the IMAGEX key
        API(GDImage, "ZI_LoadDLL", "") 
    ELSE
        Error("Unable to start GDImage")
        Close()
    END
    A vous de voir si c'est rédibitoire ou pas.

    ...

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 51
    Points : 45
    Points
    45
    Par défaut
    Ah, je pensais qu'il s'affichait à chaque appel... Dans ce cas, c'est à étudier, d'autant qu'il me semble qu'on peut créer une fenêtre totalement transparente avec GDImage non (enfin a fenêtre transparente mais pas les champs qu'elle contient, contrairement à WINDEV qui fait que la fenêtre entière est transparente, champs y compris ce qui n'est pas pratique).

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    540
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 540
    Points : 940
    Points
    940
    Par défaut
    Oui c'est possible, à condition de basculer tout la partie création de la fenêtre dans la section "code projet" et sans utiliser les fenêtres et les champs WinDev.
    Il faut utiliser directement le GPU pour tous les rendus d'affichage (ce que fait GDImage), ce qui permet toutes les fantaisies et en particulier l'utilisation d'images avec des niveaux d'opacité variable, ce qui semble être votre problématique actuelle.

    ...

Discussions similaires

  1. Comment ajouter un texte actif sur une image ?
    Par JEANAEJ dans le forum Dreamweaver
    Réponses: 5
    Dernier message: 01/12/2012, 18h24
  2. Ecrire un texte transparent sur une image.
    Par insane_80 dans le forum VB.NET
    Réponses: 2
    Dernier message: 28/02/2008, 13h10
  3. texte positionné sur une image, en bas
    Par poupouille dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 07/02/2008, 21h03
  4. Texte défilant sur une image
    Par Invité dans le forum Flash
    Réponses: 1
    Dernier message: 13/06/2007, 11h05
  5. tracer un trait sur une image (avec ImageJ)
    Par Flouf dans le forum ImageJ
    Réponses: 1
    Dernier message: 05/04/2007, 16h45

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