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

C++Builder Discussion :

Image en mosaique dans un TImage


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2003
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 24
    Points : 24
    Points
    24
    Par défaut Image en mosaique dans un TImage
    Bonjour,

    j'aimerais que l'image que je charge dans le TImage soit affiché en mosaique (et pas en étiré ou en normal), y-a-t'il une option ??? ou sinon, comment je peux faire ?

    merci

  2. #2
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 59
    Points : 84
    Points
    84
    Par défaut
    il n'existe pas a ma connaissance d'option pour fair ca....
    Mais par contre j'avait trouver (sur ce forum je croit) une astuce pour replir (pas une image) le fond d'une form avec un bmp de facon en mosaique

    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
    void image2()
    {
    Graphics::TBitmap *tmpBitmap=new Graphics::TBitmap();
    tmpBitmap->LoadFromFile("comp4.bmp");     //Load bitmap from file
    TRect rect;
    int i,j,bmpWidth,bmpHeight;
     
    rect=Form6->ClientRect;                 //Get size of TImage
    for(i=rect.Top;i<rect.Bottom;i+=tmpBitmap->Height)
    {
      for(j=rect.Left;j<rect.Right;j+=tmpBitmap->Width)
      {
        if(j<rect.Right-tmpBitmap->Width)bmpWidth=tmpBitmap->Width;
        else bmpWidth=rect.Right-j;
        if(i<rect.Bottom-tmpBitmap->Height)bmpHeight=tmpBitmap->Height;
        else bmpHeight=rect.Bottom-i;
          ::BitBlt(Form6->Canvas->Handle,   //Handle of dest. device context
                   j,                        //x coord. of dest. upper-left corner
                   i,                        //y coord. of dest. upper-left corner
                   bmpWidth,                 //width of dest. rectangle
                   bmpHeight,                //height of dest. rectangle
                   tmpBitmap->Canvas->Handle,//Handle of source device context
                   0,                        //x coord of source upper-left corner
                   0,                        //y coord of source upper-left corner
                   SRCCOPY);                 //Specifies how to draw
      }
    }
    delete tmpBitmap;

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2003
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 24
    Points : 24
    Points
    24
    Par défaut
    Merci Didier Derain, je vais essayer comme ca

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2003
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 24
    Points : 24
    Points
    24
    Par défaut
    Merci Didier,

    ca marche bien ce systeme de mosaique, mais il me semble qu'il y a un truc qui ne va pas (pour ce que je cherchais a faire), c'est la RAM que ca utilise : quelque soit la taille de l'image et en ne faisant que la mosaique, le programme prend entre 4 et 5 Mo de RAM.
    c'est normal ?
    Il y a un moyen de réduire les ressources nécessaire ?

    J'avais dans l'idée que si l'image se trouve etre en mosaique, ca prendrais moins de mémoire que si c'est une image entiere, mais ce n'est pas le cas

    Encore merci

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Août 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 481
    Points : 242
    Points
    242
    Par défaut
    Il y a aussi la possibilité d'utiliser la propriété Brush. Voir l'exemple dans le fichier d'aide :
    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
     
    Le code suivant charge un bitmap à partir d'un fichier et l'affecte au pinceau du canevas de Form1 :
     
    Graphics::TBitmap *BrushBmp = new Graphics::TBitmap;
     
    try
    {
      BrushBmp->LoadFromFile("MyBitmap.bmp");
      Form1->Canvas->Brush->Bitmap = BrushBmp;
      Form1->Canvas->FillRect(Rect(0,0,100,100));
    }
    __finally
    {
      Form1->Canvas->Brush->Bitmap = NULL;
      delete BrushBmp;
    }
    Gilbert PASQUALINI

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2003
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 24
    Points : 24
    Points
    24
    Par défaut
    merci

    ca marche pas comme je l'espérais, mais ca marche

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Voivi une méthode dont le paramètre (int A) definit la granularité de la mosaïque
    en terme de nombre de carrés. Cette mosaïque est calculée
    sur l'image et non pas sur le paintbox.
    Image1 contient l'image.
    PaintBox1 représente la mosaïque.
    La mosaïque ne tient pas compte ici du rapport des dimensions
    et n'effectue donc aucun stretch (il suffirait de rajouter quelques lignes
    de code pour faire du stretch).
    Testé sur un bitmap 318*400 en 256 couleurs
    L'image est invisible.
    Taille du paintbox à l'écran 330 * 270

    A plus !

    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
    void __fastcall TForm1::DrawMosaic(int A)
    {
    TColor C;
    Graphics::TBitmap *B = Image1->Picture->Bitmap;
    TCanvas *D = PaintBox1->Canvas;
    int w = B->Width;
    int h = B->Height;
     
    int we = w / A;
    int he = h / A;
     
    for(int y = 0; y < h; y += he)
        {
        for(int x = 0; x < w; x += we)
            {
            C = B->Canvas->Pixels[x][y];
            D->Brush->Color = C; D->Pen->Color = C;
            D->Rectangle(x, y, x + we, y + he);
            }
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void __fastcall TForm1::PaintBox1Paint(TObject *Sender)
    {
    DrawMosaic(12);
    }

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

Discussions similaires

  1. Image plusieurs fois dans un TImage
    Par Speed41 dans le forum Débuter
    Réponses: 18
    Dernier message: 20/02/2010, 16h45
  2. Charger une image dans un Timage
    Par michel71 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 29/04/2006, 08h55
  3. Mettre une image png dans un Timage
    Par Coussati dans le forum Composants VCL
    Réponses: 7
    Dernier message: 02/03/2006, 18h05
  4. une nouvelle image dans un Timage stretch
    Par copeau31 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 26/01/2006, 15h00
  5. Garder la proportionalité de l'image dans un TImage
    Par Bourak dans le forum Composants VCL
    Réponses: 1
    Dernier message: 28/10/2005, 15h03

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