Caractéristiques des Pixels - BGRA -
Bonjour à tous,
En cette froide journée J'ai besoin d'éclairages pour me mettre sur la voie de la bonne utilisation des caractéristiques d’une image à l'aide de Lazarus, problème auquel je me confronte pour la première fois. J'ai lu les diverses inforamation sur le sujet, ai téléchargé et installé les composanst BGRA mais...
J'ai réussi à charger une image (image acquise par un scan à l'aide de Xnview et de mon imprimate Multifonction. Image au format au format 100*100 ppi en véritables niveaux de gris.
Je cherche à récupérer Les caractéristiques d'un pixel quelconque de cette image (indice(s?)) caractérisant la couleur mais n'arrive pas à trouver les bonnes instructions. J'arrive seulement pour l'instant à afficher ( sur un form indépendant de l'image) à afficher les coordonnée du pixel.
Ci après une partie de mon code :
1 - la récupération de l'image :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| procedure TF_VueImg.FormPaint(Sender: TObject);
Var Img_Trait1W, Img_Trait1H : Integer ;
begin
Img_Trait1 := TBGRABitmap.Create(F_ChoixImg.FNE_Img.text) ;
Img_Trait1.Draw(Canvas,0,0,True);
Img_Trait1W := Img_Trait1.Width ;
Img_Trait1H := Img_Trait1.Height ;
F_ChoixImg.Ed_TaillImgW.Text := IntToStr(Img_Trait1W) ;
F_ChoixImg.Ed_TaillImgH.Text := IntToStr(Img_Trait1H) ;
F_ChoixImg.Lb_InfoTaille.Caption := 'Taille : ' + IntToStr(Img_Trait1W)+ ' * ' + IntToStr(Img_Trait1H) + ' Pixels' ;
end; |
2- La partie que je cherche à renseigner :
Code:
1 2 3 4 5 6 7 8 9 10 11
| procedure TF_VueImg.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
Var PixImg : TBGRAPixel;
begin
F_VueImg.Cursor := CrCross ;
F_ChoixImg.Lb_PosX.Caption := 'Pos. X : ' + intToStr(X) ;
F_ChoixImg.Lb_PosY.Caption := 'Pos. Y : ' + IntToStr(Y) ;
// CoulPix:=Img_Trait1.Pixels[X,Y] ; CE QUI POSE pROBLEME
F_ChoixImg.Lb_Color.Caption := 'Niveau gris : ' + IntToStr(CoulPix) ; // JE souhaite récupérer
// la (les) informations sur le pixel pointé (info couleur si possible nombre de 0 à N) N : 8 - 16 ou 256
end; |
Je vous remercie par avance de vos lumières.
Cordialement
R.O.
1 pièce(s) jointe(s)
a/s Couleur d'un pixel et GBRA
Bonjour,
En réponse à la remarque de Jipété. Effectivement, mon texte et surtout mon code sont un peu confus et c'est peut-être parce que je n'arrive pas à intuiter la solution. Je cherche à récupérer l'information concernant la couleur d'un pixel dans une image chargée à l'aide des composants BGRA.
Je dispose d'une image en " gris véritable " assez simple (au moins pour mon image test) . Lorsque j'ouvre cette image à l'aide de XnView et que je la parcours en affichant les informations de couleur il s'affiche Index[09] ou 17 etc... et HTML #11.... #0A etc.. pour les parties les plus sombres et des valeurs d'Index> 150 pour les parties les plus claires ( HTML#00 ou autres). Ce qui m'intéresse est de récupérer ces valeurs pour pouvoir ensuite initier des calculs sur les valeurs de couleur claire.
Depuis mon message, j'ai consulté plus attentivement la documentation Lazarus sur TColor et ai vu qu'il existait 2 types de Color : Le Tcolor Standard 'RGB3x 8 bits' et le TFPcolor utilisé pour FPLImage 'RGBA 4x 16 bits'.
Ce qui m'a fait évoluer mon code qui est devenu :
La variable CoulPix de mon code est une variable globale de Type Tcolor que je souhaiterai pouvoir récupérer. X et Y sont les coordonnées d'un pixel quelconque de l'image à traiter. et les lignes 3 et 4 du code affichent ces coordonnées dans un Tedit du formulaire de gestion de l'image.
Code:
1 2 3 4 5
| begin
F_VueImg.Cursor := CrCross ;
F_ChoixImg.Lb_PosX.Caption := 'Pos. X : ' + intToStr(X) ;
F_ChoixImg.Lb_PosY.Caption := 'Pos. Y : ' + IntToStr(Y) ;
CoulPix := FPColorToTColor(F_VueImg.Img_Trait1.Colors[X,Y]); |
Ce code s’exécute mais il plante à l'exécution sur un External SigVer error (image jointe) .Pièce jointe 355431
J'espère que ce complément d'explication vous conviendra et que vous pourrez me mettre sur la voie.
Cordialement
R.O.
a/s Couleur d'un pixel et GBRA
Bonsoir à tous ...
... et merci pour les réponses même si des choses simples m'ont bêtement échappées lors de ma lecture des informations sur Tcolor. Les suggestions qui m'ont été faites m'ont permis de résoudre mon problème. Compte-tenu des options que j'ai prises dans le reste du code de l'application, le code fonctionnel est devenu :
Code:
1 2 3 4 5 6 7 8 9
| procedure TF_VueImg.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
Var CoulIndice : Integer ;
begin
F_VueImg.Cursor := CrCross ;
F_ChoixImg.Lb_PosX.Caption := 'Pos. X : ' + intToStr(X) ;
F_ChoixImg.Lb_PosY.Caption := 'Pos. Y : ' + IntToStr(Y) ;
CoulPix := Canvas.Pixels[X,Y] ;
CoulIndice := Green(CoulPix) ; |
Ce code renvoie bien pour la variable CoulIndice des nombres entre 0 et 255 comme je le souhaitais.
Cordialement et merci.
R.O.