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 :

remplir un tbitmap [Windows]


Sujet :

Composants FMX Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut remplir un tbitmap
    Bonjour les gens du dimanche,

    Je suis en train de m'arracher les cheveux ... (heureusement, j'en ai de reste)

    Pourquoi ce code pourtant ultra-simple ne produit aucun effet sur mon image ?

    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
     
      with Image1.Bitmap do
      begin
        Canvas.BeginScene();
        Canvas.Fill.Color        := TColorRec.Red;
        Canvas.Fill.DefaultColor := TColorRec.Red;
        Canvas.Fill.Kind         := FMX.Graphics.TBrushKind.Solid;
        Canvas.FillRect(
          RectF(0, 0, image1.Width, image1.height),
          0,
          0,
          [],
          255
        );
        Canvas.EndScene;
      end;

    J'ai oublié de préciser: Firemonkey sous XE7



    Trouvé .... Il faut utiliser claWhite de UIConsts au lieu de TColorRec ..

    Tout ça pour ça ... :-(

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    deux petites choses

    1) il faut définir les dimensions du Bitmap
    2) il ne faut pas oublier le canal Alpha, TColorRec.Red donne un joli rouge totalement transparent, TAlphaColorRec.Red donne un rouge plein

    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
     
      with Image1.Bitmap do
      begin
        SetSize(Round(Image1.Width), Round(Image1.Height));
        Canvas.BeginScene();
        Canvas.Fill.Color        := TAlphaColorRec.Red;
        Canvas.Fill.DefaultColor := TAlphaColorRec.Red;
        Canvas.Fill.Kind         := FMX.Graphics.TBrushKind.Solid;
        Canvas.FillRect(
          RectF(0, 0, image1.Width, image1.height),
          0,
          0,
          [],
          255
        );
        Canvas.EndScene;
      end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    En fait, c'était juste un exemple. Mon bitmap est passé en paramètre à une procédure.

    Par contre, j'ai un nouveau 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
     
      Bmp.Canvas.BeginScene();
      Bmp.Clear(ClaWhite);
      Bmp.Canvas.EndScene;
     
      if Bmp.Map(TMapAccess.Write, Data) = True then
      begin
        for I := Low(V2) to High(V2) do
          if V2[I] then
          begin
            X := (I + 1) div W;
            Y := (I + 1) mod W;
            Data.SetPixel(X, Y, claBlack);
          end;
        Bmp.Unmap(Data);
      end;
    W est la largeur du bitmap.
    J'ai une violation d'accès sur le SetPixel.

    Mon bitmap devrait être défini comme 1 byte par pixel et par défaut il l'est de 4, ce qui explique cela.
    Mais impossible de trouver comment créer un bitmap de ce type.
    PixelFormat est en lecture seule.

    Pour vérifier que ça vient bien de là, j'ai fait le même code en rajoutant un div 4 sur chaque X et Y et ça me donner le dessin sur un quart de l'image.

    Saurais-tu comment contourner ça ?

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    euh...tu n'aurais pas inversé le modulo et la division ? X devrait être en "mod W" et Y en "div W"
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    Mais quel je fais ....

    Merci à toi .... tu sauves mon w-e .

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

Discussions similaires

  1. remplir feuille excel
    Par thibaud60 dans le forum Access
    Réponses: 2
    Dernier message: 24/11/2003, 10h21
  2. TBitmap et problèmes de pointeurs...
    Par benj63 dans le forum C++Builder
    Réponses: 8
    Dernier message: 28/07/2003, 13h39
  3. [VB.NET] Créer et remplir un nouveau fichier Access
    Par Manue.35 dans le forum Accès aux données
    Réponses: 2
    Dernier message: 18/07/2003, 15h42
  4. tbitmap.free dans une function
    Par portu dans le forum Langage
    Réponses: 7
    Dernier message: 19/06/2003, 22h08
  5. [TChart] comment remplir un histogramme avec du rouge strié.
    Par :GREG: dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/08/2002, 09h37

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