bonjour j'ai des difficultes pour charger une image bmp et la lire pixel par pixel
car cette etape me permet de faire une segmentation d'image satilitaire
Version imprimable
bonjour j'ai des difficultes pour charger une image bmp et la lire pixel par pixel
car cette etape me permet de faire une segmentation d'image satilitaire
Salut,
quel est le code que tu as fait?
O� se trouve le probl�me?
Il faut utiliser la m�thode Pixel du TImage:
Il existe aussi la m�thode ScanLine, qui est plus rapide.Code:
1
2
3
4 int R = (Image->Canvas->Pixels[i][j]&0xFF0000)>>16, G = (Image->Canvas->Pixels[i][j]&0x00FF00)>>8, B = (Image->Canvas->Pixels[i][j]&0x0000FF);
Salut !
Je te conceil vivement d'utiliser la m�thode ScanLine qui beacoups plus rapide, et moins gourmante que la premi�re m�thode.
Tu trouvera plein d'exemples sur ce forum; Handerson n'as pas c�ss� d'en contribuer...
A+
Salut !
Une derni�re fois :
On suppose ceci :Code:
1
2
3
4
5
6
7
8 class jPixel { public : Byte Blue; Byte Green; Byte Red; };
On aura donc ceci � faire :Code:
1
2
3 AnsiString Filename; //chemin complet du bitmap Graphics::TBitmap *Bitmap = new Graphics::TBitmap; //ne pas oublier de le détruire
L'acc�s aux composantes (R,G,B) est simple et rapide :Code:
1
2
3 Bitmap->LoadFromFile(Filename); Bitmap->PixelFormat = pf24bit; // convertir en 24 bits
=======================Code:
1
2
3
4
5
6
7
8
9
10
11
12 jPixel *Line; for(int y = 0; y < Bitmap->Height; y++) { Line = (jPixel*)Bitmap->ScanLine[y]; for(int x = 0; x < Bitmap->Width; x++) { ...Line[x].Red... ...Line[x].Green... ...Line[x].Blue... } }
BITMAPS COULEURS 8 BITS
=======================
On peut convertir les bitmaps 8 bits en 24 bits, ce qui est une solution de facilit� mais qui n�cessite plus de ressources m�moire.
Le traitement sur un bitmap 8 bits est par contre totalement diff�rent puisque chaque pixel (vu par ScanLine) correspond � l'index d'une couleur dans la palette.
Dans ce cas pr�cis, comme il n'y a que 256 teintes possibles, il suffit de les r�cup�rer dans un tableau.
On y gagnera �norm�ment, en lieu et place de Pixels[x][y] effectu� sur l'int�gralit� du bitmap 8 bits.
On d�clare :
Exemple de code pour r�cup�rer les 256 teintes de la palette d'un bitmap :Code:
1
2 PALETTEENTRY Colors[256];
On acc�dera aux composantes RGB en faisant :Code:
1
2
3 Graphics::TBitmap *Bitmap = Image1->Picture->Bitmap; //pour montrer que... GetPaletteEntries(Bitmap->Palette, 0, 256, Colors); // récupération des 256 couleurs
Ce qui �vitera de solliciter les GetR, GetG et GetBValue suite � Pixels[x][y] !Code:
1
2
3
4
5
6
7
8
9
10
11 PALETTEENTRY color; Byte *Line; ... Line = (Byte*)Bitmap->ScanLine[y]; ... color = Colors[ Line[x] ]; ...color.peRed ...color.peGreen ...color.peBlue
Pour tout ce qui concerne le traitement d'images on a int�r�t � aller dans le sens de la rapidit� d'ex�cution et non dans celle de la r�daction du code !
A plus !
:salut:
Ne serais pas :king: de lancer un sous forum c++Builder pour le traitement d'image ?
Salut !
Il y a pas mal de choses sur le forum Algorithmes -> Traitement d'images !
A plus !