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
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
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;
Merci Didier Derain, je vais essayer comme ca
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
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
merci
ca marche pas comme je l'espérais, mais ca marche
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); }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager