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

API, COM et SDKs Delphi Discussion :

remplir une région avec un bitmap


Sujet :

API, COM et SDKs Delphi

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    170
    Points
    0
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 170
    Points : 0
    Par défaut remplir une région avec un bitmap
    Bonjour,

    Je voudrais remplir une région (HRgn) avec un bitmap. FillRgn ne convient pas, car il marche avec une brush et celle-ci ne peut être supérieure à 8x8 pixels.
    Qulequ'un aurait-il une idée? Merci.

  2. #2
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Points
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Par défaut
    ce n'est pas vrai.
    Citation Envoyé par CreateDIBPatternBrushPt
    Windows 95: Creating brushes from bitmaps or DIBs larger than 8x8 pixels is not supported. If a larger bitmap is specified, only a portion of the bitmap is used.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    170
    Points
    0
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 170
    Points : 0
    Par défaut
    Merci beaucoup pour la suggestion concernant l'API. J'ai essayé ceci:

    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
    var
      Form1: TForm1;
      Brush1 : HBrush;
      Bitmap1: TBitmap;
      Rgn1 : HRGN;
     
    procedure TForm1.Button5Click(Sender: TObject);
    begin
     Bitmap1 := TBitmap.Create;
     Bitmap1 := Image1.Picture.Bitmap;
     Brush1 := CreateDIBPatternBrushPt(@Bitmap1, DIB_RGB_COLORS);
     Rgn1 := CreateEllipticRgn(100, 35, 0, 120);
     FillRgn(Image2.Canvas.Handle, Rgn1, Brush1);
     Image2.Invalidate;
     DeleteObject(Rgn1);
    end;
    Mais je n'ai pas de résultat: la région n'est pas remplie avec le bitmap. Y aurait il une erreur dans mon code ?

  4. #4
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Points
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Par défaut
    et en utilisant le TCanvas, ca doit etre plus simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    var
    Form1: TForm1;
    Bitmap1: TBitmap;
     
    procedure TForm1.Button5Click(Sender: TObject);
    begin
    Bitmap1 := Image1.Picture.Bitmap;
    Image2.Canvas.Brush.Bitmap := Bitmap1;
    image2.Canvas.Ellipse(100,35,0,120,0,0);
    image2.Canvas.Brush.Bitmap := nil;
    end;
    je n'ai pas testé le code, mais tu devrait t'en sortir en faisant un truc ressemblant à ca.

  5. #5
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Points
    1 935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Points : 1 935
    Par défaut
    Citation Envoyé par guillemouze Voir le message
    et en utilisant le TCanvas, ca doit etre plus simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    var
    Form1: TForm1;
    Bitmap1: TBitmap;
     
    procedure TForm1.Button5Click(Sender: TObject);
    begin
    Bitmap1 := Image1.Picture.Bitmap;
    Image2.Canvas.Brush.Bitmap := Bitmap1;
    image2.Canvas.Ellipse(100,35,0,120,0,0);
    image2.Canvas.Brush.Bitmap := nil;
    end;
    je n'ai pas testé le code, mais tu devrait t'en sortir en faisant un truc ressemblant à ca.
    Suivant ton code, j'ai retouché un peu et testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var
      Form1: TForm1;
      Bitmap1: TBitmap;
    begin
      Bitmap1 := Image1.Picture.Bitmap;
      Image2.Canvas.Brush.Bitmap := Bitmap1;
      image2.Canvas.Ellipse(100,35,0,120); // 4 paramètres seulement ;-)
      image2.Canvas.Brush.Bitmap := nil;
    end;

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 867
    Points
    13 710
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 867
    Points : 13 710
    Par défaut
    Il y a aussi SelectClipRgn .

    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
    procedure TForm1.FormPaint(Sender: TObject);
    var
      Bmp :TBitmap;
      Rgn :hRGN;
     
    begin
      Bmp := TBitmap.Create;
      try
        Bmp.LoadFromFile('Image.bmp');
     
        Rgn := CreateEllipticRgn(100, 35, 0, 120);
     
        if Rgn <> 0 then
        begin
          SelectClipRgn(Canvas.Handle, Rgn);
     
          Canvas.Draw(0, 0, Bmp);
     
          SelectClipRgn(Canvas.Handle, 0);
          DeleteObject(Rgn);
        end;
      finally
        Bmp.Free;
      end;
    end;

Discussions similaires

  1. [C#] Remplir une combobox avec le champs d'une table Access
    Par Damsou dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/06/2005, 16h31
  2. Remplir une ListView avec une BD
    Par manikou dans le forum MFC
    Réponses: 1
    Dernier message: 17/05/2005, 10h48
  3. [VB.NET] Remplir une ComboBox avec une requete sql
    Par graphicsxp dans le forum Windows Forms
    Réponses: 6
    Dernier message: 22/03/2005, 16h29
  4. Réponses: 2
    Dernier message: 26/07/2004, 14h34
  5. remplir une table avec UTL_FILE.GET_LINE
    Par delphim dans le forum SQL
    Réponses: 9
    Dernier message: 12/03/2004, 11h15

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