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

Free Pascal Discussion :

BGRABitmap sans Lazarus dans une application console sous Windows


Sujet :

Free Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut BGRABitmap sans Lazarus dans une application console sous Windows
    Bonjour !

    Je voulais essayer d'utiliser BGRABitmap sans Lazarus, dans une application console (pour fabriquer une image PNG et la sauvegarder dans un fichier).

    Tant qu'il n'y a pas de texte, ça marche. Mais lorsqu'il y a du texte, l'application se compile mais lorque la fenêtre noire s'ouvre rien ne se passe (aucun fichier n'est créé) et l'application est bloquée : je dois la fermer manuellement, alors qu'elle devrait se fermer toute seule.

    Voici un exemple de programme avec lequel j'ai rencontré le problème :

    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
    program test;
     
    uses
      Classes, SysUtils,
      BGRAGraphics, BGRABitmap, BGRABitmapTypes;
     
    procedure DrawEllipseHello(aBitmap: TBGRABitmap);
    begin
      aBitmap.Fill(BGRABlack);
     
      aBitmap.CustomPenStyle := BGRAPenStyle(2, 1);
      aBitmap.FillEllipseLinearColorAntialias(aBitmap.Width / 2, aBitmap.Height / 2, aBitmap.Width / 2 - 5, aBitmap.Height / 2 - 5, BGRAPixelTransparent, BGRAWhite);
      aBitmap.EllipseAntialias(aBitmap.Width / 2, aBitmap.Height / 2, aBitmap.Width / 2 - 5, aBitmap.Height / 2 - 5, CSSRed, 5);
     
      if aBitmap.Height div 10 < 10 then
        aBitmap.FontHeight := 10
      else
        aBitmap.FontHeight := aBitmap.Height div 10;
      with aBitmap.FontPixelMetric do
        aBitmap.TextOut(aBitmap.Width / 2, aBitmap.Height / 2 - (CapLine + Baseline) / 2, 'Hello world', BGRABlack, taCenter);
     
      aBitmap.Canvas.Pen.Color := clBlue;
      aBitmap.Canvas.MoveTo(0, 0);
      aBitmap.Canvas.LineTo(aBitmap.Width, aBitmap.Height);
    end;
     
    var
      bmp: TBGRABitmap;
     
    begin
      TBGRABitmap.AddFreeTypeFontFolder(GetCurrentDir);
     
      bmp := TBGRABitmap.Create(800, 600, BGRABlack);
      DrawEllipseHello(bmp);
      bmp.SaveToFile('test.png');
      bmp.Free;
    end.
    Je précise que j'ai bien un fichier arial.ttf dans le même dossier que le programme.

    Et voici le fichier de commande dont je me sers :

    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    set path=C:\FPC\3.0.2\bin\i386-win32
     
    if not exist units md units
     
    set bgra=C:\Sources\bgrabitmap\bgrabitmap
    set lazutils=C:\Sources\lazutils
     
    fpc.exe -Mobjfpc -dBGRABITMAP_DONT_USE_LCL -Fu%lazutils% -Fu%bgra% -FUunits %1

    Auriez-vous une idée de ce qui ne va pas ?

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    ne serais ce pas les propriété de placement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     aBitmap.TextOut(aBitmap.Width / 2, aBitmap.Height / 2 - (CapLine + Baseline) / 2, 'Hello world', BGRABlack, taCenter);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     aBitmap.TextOut(aBitmap.Width div 2, aBitmap.Height div 2 - (CapLine + Baseline) div 2, 'Hello world', BGRABlack, taCenter);

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    @anapurna

    Merci pour ta réponse mais je ne crois pas que le problème vienne de là. Ce code provient d'un exemple officiel. Il se compile, et donne un résultat correct lorsqu'il est compilé avec Lazarus, et avec le paquet bgrabitmap4nogui. Moi je cherche à compiler sans Lazarus et j'y arrive, mais le programme ne fonctionne pas.

    Dans BGRABitmap, comme dans Cairo, les coordonnées non entières sont autorisées.

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    effectivement j'ai regarde les sources est c'est un single en paramettre
    autre point a verifier

    n'aurais tu pas oublié d'installer les font que tu veut utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
       FFontCollection: TFreeTypeFontCollection;
      begin
        FFontCollection := TFreeTypeFontCollection.Create;
        FFontCollection.AddFile('times.ttf');
        SetDefaultFreeTypeFontCollection(FFontCollection);
        TBGRABitmap.AddFreeTypeFontFolder(GetCurrentDir);
        bmp.FontName := 'Times New Roman';
     
       ...

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Merci encore pour ta réponse mais je suis sûr que le code est bon car il compile et donne le résultat attendu comme projet Lazarus. Tout ce que j'ai fait c'est de chercher à compiler le fichier *.lpr par une ligne de commande.

    Autrement ta question est pertinente mais l'exemple utilise la police par défaut (Arial) : c'est pourquoi il n'y a pas de code pour utiliser une autre police. Donc je ne crois pas que le problème vienne de là. En même temps, je ne rencontre ce problème qu'avec du code affichant du texte. Donc le problème doit bien être de ce côté-là.

  6. #6
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    en regardant le code on s'aperçois qu'il n'utilise pas le même "Provider" de font
    c'est peut être bien ton soucis

    dans LCL bitmap

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      result := TLCLFontRenderer.Create;
    dans TBGRANoGUIBitmap
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      result := TBGRAFreeTypeFontRenderer.Create;

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/03/2007, 15h38
  2. ShellExecute dans une application console?
    Par balu dans le forum Delphi
    Réponses: 5
    Dernier message: 24/06/2006, 21h26
  3. [C#]Marquer une pause dans une application Console
    Par KibitO dans le forum Windows Forms
    Réponses: 2
    Dernier message: 14/06/2006, 16h28
  4. Les caractères dans une application console
    Par maximedrouet dans le forum Langage
    Réponses: 2
    Dernier message: 26/05/2005, 16h44
  5. Utiliser un timer dans une application console
    Par chavers dans le forum Langage
    Réponses: 8
    Dernier message: 25/05/2005, 14h07

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