Bonjour � vous tous,
Je suis actuellement entrain de r�aliser une petit logiciel sur le traitement d�image,Je ne travaille qu�avec des Image BMP 24 bits (pf24bit) et de niveau de gris.
Afin de minimiser le nombre d�appels des m�thodes ScanLine et Canvas->Pixels,J�ai choisi de charger l�image du TImage vers une matrice (Byte mat[3000][3000]), et apr�s avoir effectuer les traitement sur la matrice transf�rer les donn�es de la matrice vers un autre TImage,et pour cela j�ai cr�e deux proc�dures (Grace � Henderson) dont voici les prototypes :
void ImageToMatrice(TImage *img,byte mat[3000][3000])
void MatriceToImage(TImage *img,byte mat[3000][3000])
La premi�re proc�dure remplit la matrice � partir de l�image qu�a charg� l�utilisateur dans un TImage (Tout en la transformant en niveau de gris)
La deuxi�me proc�dure transfert le contenu de la matrice vers un TImage .
Voici leurs codes :
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90 void ImageToMatrice(TImage *img,byte mat[3000][3000]) { class jPixel { public : Byte Blue; Byte Green; Byte Red; }; Graphics::TBitmap *Bitmap = new Graphics::TBitmap; jPixel *Pixel; int grey, blue, red, green; Graphics::TBitmap *B = img->Picture->Bitmap; for(int y = 0; y < B->Height; y++) { Pixel = (jPixel*)B->ScanLine[y]; for(int x = 0; x < B->Width; x++) { grey = (Pixel[x].Red+ Pixel[x].Green+ Pixel[x].Blue) /3; mat[x][y]=grey; } } img->Repaint(); } void MatriceToImage(TImage *img,byte mat[3000][3000]) { class jPixel { public : Byte Blue; Byte Green; Byte Red; }; Graphics::TBitmap *Bitmap = new Graphics::TBitmap; jPixel *Pixel; int grey, blue, red, green; Graphics::TBitmap *B ; B=img->Picture->Bitmap; for(int y = 0; y < B->Height; y++) { Pixel = (jPixel*)B->ScanLine[y]; for(int x = 0; x < B->Width; x++) { Pixel[x].Red=mat[x][y]; Pixel[x].Green=mat[x][y]; Pixel[x].Blue=mat[x][y]; } } img->Repaint(); }
Maintenant afin de tester ces deux proc�dures,j�ai d�pos� dans ma forme deux TImage Image1,Image2 et un bouton.Image1 contient une BMP et Image2 est vide (Invisible � l�ex�cution) .
A l��v�nement OnClick du bouton voici ce que j�ai mis :
L� pas de soucis tout s�effectue tr�s bien,Mais si je voulais garder l�image originale et afficher le r�sultat dans Image2 de cette mani�re :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8 ImageToMatrice(Image1,matrice) ; // . //TRAITEMENT // MatriceToImage(Image1,matrice) ;
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9 ImageToMatrice(Image1,matrice) ; // . //TRAITEMENT // MatriceToImage(Image2,matrice) ;
L� rien ne s�affiche dans Image2 .Et c�est du faite qu�elle ne contienne pas de BMP initialement je pense
Vous me diriez peut �tre que le probl�me sera r�solu en ajoutant l�instruction
Juste avant :
Code : S�lectionner tout - Visualiser dans une fen�tre � part Image2->Picture->Bitmap=Image1->Picture->Bitmap ;
Code : S�lectionner tout - Visualiser dans une fen�tre � part MatriceToImage(Image2,matrice) ;
Et c�est le cas !mais je ne veux pas �tre contraint d�ajouter cette instruction � chaque fois car je voudrai faire appel � ces proc�dures depuis plusieurs projets.
Quelqu�un aurai une id�e ?
Merci � vous de votre patience.
N�h�siter pas � me demander quoi que ce soit si je n�ai pas �t� clair sur certains points.
Cordialement.
Partager