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

Composants FMX Delphi Discussion :

Problème avec BeginScene d'un composant TImage.


Sujet :

Composants FMX Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 111
    Points : 44
    Points
    44
    Par défaut problème d'affichage de bitmap
    Bonjour

    Je viens à nouveau vous solliciter sur FireMonkey pour un problème d'affichage de BitMap.

    Le programme affiche des bitmaps sur la TFORM avec la commande DrawBitMap qui est appelée toutes les 15 millièmes de secondes pour faire une animation.

    Cela fonctionne très bien quand je l'exécute sur la plate forme Windows 32 bits mais quand je l'exécute sur la plate-forme OS X du mac, aucune image ne s'affiche, la fenêtre reste irrémédiablement vide ;-(

    Savez-vous d'où cela peut provenir ? Je travaille avec Delphi XE4.

    Je vous remercie par avance de votre réponse.

    Je vous souhaite une très bonne journée

    Laurent CUSSAC

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 111
    Points : 44
    Points
    44
    Par défaut
    Bonjour

    A force de chercher pourquoi cela ne fonctionne pas, en fait c'est le Timage.Canvas.BeginScene qui renvoie toujours faux donc je ne peux faire aucun graphique sur la fenêtre quand l'application tourne sur MAC. Savez-vous pourquoi ?

    Un grand merci pour votre réponse

    Bonne journée à tous

    Laurent CUSSAC

  3. #3
    Membre chevronné
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 931
    Points : 1 909
    Points
    1 909
    Par défaut
    Bonjour,

    Citation Envoyé par ninaleo Voir le message
    Bonjour

    Je viens à nouveau vous solliciter sur FireMonkey pour un problème d'affichage de BitMap.
    Si c'est un problème avec FMX, pourquoi ne pas le mettre dans le forum FMX ? Tu aurais certainement plus de chance d'avoir une réponse.

    Sinon, on pourrait voir le code qui affiche ces bitmaps et qui pose problème ?

  4. #4
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut Infos complémentaires
    Citation Envoyé par ninaleo Voir le message
    Bonjour
    A force de chercher pourquoi cela ne fonctionne pas, en fait c'est le Timage.Canvas.BeginScene qui renvoie toujours faux donc je ne peux faire aucun graphique sur la fenêtre quand l'application tourne sur MAC. Savez-vous pourquoi ?
    Un grand merci pour votre réponse
    Bonne journée à tous
    Laurent CUSSAC
    Bonjour,
    Je ne développe pas sur cible MAC, mais sur cible Androïd ou Windows. Peux tu isoler le problème dans quelques lignes de code que je les compare a celles que j'ai écrit pour dessiner avec FMX pour voir si le problème n'est pas ailleurs.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 111
    Points : 44
    Points
    44
    Par défaut
    Bonjour

    Merci pour toutes vos réponses, je vais poser cette question dans le forum FMX suite à vos conseils ;-)

    Voici la partie du code qui fonctionne sur PC mais pas sur MAX ;-( ( Timage est l'image sur laquelle j'affiche la bitmap BulleTest )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        RectangleARestaurer := RectF(PosX - 56  , PosY - 56 , PosX + 56 , PosY + 56 );
        RectangleCopie := RectF(0, 0, 112 , 112) ;
        if Timage.Canvas.BeginScene () then
          Begin
           Try
             Timage.Canvas.DrawBitmap  ( BulleTest , RectangleCopie , RectangleARestaurer , 1 , True ) ;
           Finally
             Timage.Canvas.EndScene() ;
           End;
    Merci d'avance pour votre réponse

    Je vous souhaite une très bonne journée

    Laurent CUSSAC

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 111
    Points : 44
    Points
    44
    Par défaut Problème avec BeginScene d'un composant TImage.
    Bonjour

    J'ai un composant TImage sur une fiche pour lequel Image.Canvas.BeginScene renvoie toujours faux donc je ne peux faire aucun graphique sur la fenêtre quand l'application tourne sur MAC. Savez-vous pourquoi ? Je précise que ce même code fonctionne parfaitement sur PC !!!

    Voici le bout de code qui ne fonctionne pas : Image est le composant Image de la TForm sur laquelle je veux afficher l'image BulleTest
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        RectangleARestaurer := RectF(PosX - 56  , PosY - 56 , PosX + 56 , PosY + 56 );
        RectangleCopie := RectF(0, 0, 112 , 112) ;
       if Image.Canvas.BeginScene () then
          Begin
           Try
             Image.Canvas.DrawBitmap  ( BulleTest , RectangleCopie , RectangleARestaurer , 1 , True ) ;
           Finally
             Image.Canvas.EndScene() ;
           End;
    Je vous remercie par avance pour votre réponse.

    Bonne journée à tous

    Laurent CUSSAC

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 111
    Points : 44
    Points
    44
    Par défaut Suite conversation
    RE bonjour

    Comme aucune commande graphique ne fonctionne, je me pose la question de savoir si le XCode 6.0.1 que j'ai installé sur le MAC est bien actif car j'ai cru comprendre que la compilation utilise Xcode pour tout ce qui est partie graphique. Comment savoir alors que XCode 6.0.1 est bien installé et activé sur le MAC ?

    Je vous remercie par avance de votre réponse

    Bonne journée à vous tous

    Laurent CUSSAC

  8. #8
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    l'erreur est dans Windows en fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if Image1.Canvas.BeginScene then
      begin
        Image1.Canvas.DrawLine(TPointF.Create(0, 0), TPointF.Create(100, 100), 1);
        Image1.Canvas.EndScene;
      end else begin
        Memo1.Lines.Add('Impossible de dessiner sur l''image');
      end;
    end;
    le Mac refuse de dessiner, et Windows me dessine un trait de 100x100 pixel à partir du coin gauche de la fiche, en fait il ne dessine pas dans l'image car elle est vide. Il suffit de redimensionner la fenêtre pour s'en rendre compte, le trait disparaît.

    voici qui corrige les deux problèmes

    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
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Image1.Bitmap := TBitmap.Create;
      Image1.Bitmap.SetSize(200, 200);
      Image1.Bitmap.Clear(TAlphaColorRec.White);
     
      if Image1.Bitmap.Canvas.BeginScene then
      begin
        Image1.Bitmap.Canvas.DrawLine(TPointF.Create(0, 0), TPointF.Create(100, 100), 1);
        Image1.Bitmap.Canvas.EndScene;
      end else begin
        Memo1.Lines.Add('Impossible de dessiner sur l''image');
      end;
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  9. #9
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut une réponse possible au post #5 (depuis, fusion discussions)
    Citation Envoyé par ninaleo Voir le message
    ...
    if Timage.Canvas.BeginScene () then
    Begin
    Try
    Timage.Canvas.DrawBitmap ( BulleTest , RectangleCopie , RectangleARestaurer , 1 , True ) ;
    Finally
    Timage.Canvas.EndScene() ;
    End;...
    Si ton TImage a pour nom Image1 j'aurai plutôt ce code
    Citation Envoyé par ninaleo Voir le message
    Bonjour
    with Image1.Canvas do
    Begin
    BeginScene ()
    DrawBitmap ( BulleTest , RectangleCopie , RectangleARestaurer , 1 , True ) ;
    EndScene() ;
    End;
    Sauf erreur de ma part :
    Le bloc try est superflu
    Il faut travailler avec l'instance de l'image

  10. #10
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 299
    Points
    11 299
    Billets dans le blog
    6
    Par défaut
    Suite à la fusion de deux discussions, la chronologie intriquée des réponses rend le fil de lecture à peine moins linéaire
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 111
    Points : 44
    Points
    44
    Par défaut
    Merci beaucoup pour votre réponse !! ça marche nickel, par contre la vitesse de l'animation est beaucoup moins rapide pourtant la vitesse du CPU est 2,6 GHZ sur le Mac contre 2,4 GHZ sur mon portable et le rapport de vitesse va de 1 à presque 3 ! Est-ce normal ?

    Très bonne fin de journée

    Laurent CUSSAC

  12. #12
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par ninaleo Voir le message
    Merci beaucoup pour votre réponse !! ça marche nickel, par contre la vitesse de l'animation est beaucoup moins rapide pourtant la vitesse du CPU est 2,6 GHZ sur le Mac contre 2,4 GHZ sur mon portable et le rapport de vitesse va de 1 à presque 3 ! Est-ce normal ?

    Très bonne fin de journée

    Laurent CUSSAC
    oui car ceci "la commande DrawBitMap qui est appelée toutes les 15 millièmes de secondes pour faire une animation." n'a aucun sens. 66 FPS c'est énorme, et ça ne tient pas compte de la capacité de rafraîchissement du PC/Mac. Il serait plus judicieux d'insérer le dessin dans un événement OnPaint et d'utiliser le Timer uniquement pour forcer un Invalidate si le précédent a déjà été traité (sinon c'est pas la peine, le PC ne suis pas).

    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
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      if FValide then
      begin
        FValide := False;
        Invalidate;
      end;
    end;
     
    procedure TForm1.FormPaint(Sender: TObject; Canvas: TCanvas;
      const ARect: TRectF);
    begin
     // faire le dessins
     // ...
     
     // accepté une nouvelle frame
     FValide := True;
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 111
    Points : 44
    Points
    44
    Par défaut
    Bonsoir

    Merci beaucoup pour tous ces conseils : j'ai appliqué votre conseil: la vitesse reste la même sur le PC mais cela ne va pas plus vite sur le MAC ;-( Je ne comprends pas pourquoi, peut être XCode quine fonctionne pas comme sur le PC ?

    Bonne soirée à vous et encore merci pour votre aide précieuse et rapide.

    Laurent CUSSAC

  14. #14
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    XCode est correctement installé sinon l'application ne compilerait pas.

    Par contre ce n'est pas la CPU qu'il faut comparer mais la GPU (carte graphique) elle seule intervient pour le rendu graphique...entre un AirBook avec une Intel HD Graphics 4000 et une nVidia sur PC y'a pas photo.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/12/2007, 19h59
  2. Réponses: 0
    Dernier message: 27/09/2007, 02h59
  3. problème avec ma palette des composants
    Par korntex5 dans le forum Delphi
    Réponses: 4
    Dernier message: 10/08/2006, 13h35
  4. [JScrollPane] Problème avec la taille du composant interne
    Par wikers dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 11/09/2005, 15h03
  5. Problème avec la fonction Stretch de TImage
    Par laventure dans le forum Composants VCL
    Réponses: 5
    Dernier message: 09/08/2005, 13h06

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