Bonjour,
tout est dans le titre, voici cependant quelques précisions :
Soit un TImage posé sur un TPanel lui-même posé sur une fiche.
Soit la propriété Picture de ce TImage remplie grâce à l'inspecteur d'objets (Picture... Charger, et choisir un fichier, tout le monde connaît).
Soit donc au runtime l'image affichée correctement et sur laquelle je vais effectuer des calculs (sur les pixels, très exactement), en cliquant sur un bouton dont la proc OnClick contient le code des calculs et tout se passe bien (j'utilise Scanline et donc
bmptmp a été préalablement rempli avec bmptmp.Assign(Image1.Picture.Bitmap);)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 for h := 0 to Height4Moyenne-1 do begin p := pRGBTriple(bmptmp.RawImage.GetLineStart(h)); for w := 0 to Width4Moyenne-1 do begin Rtot := Rtot + p[w].rgbtRed; Gtot := Gtot + p[w].rgbtGreen; Btot := Btot + p[w].rgbtBlue; end; end;
Tout est parfait.
Soit maintenant un système de copie d'une partie de l'écran, sélectionnée à la souris (une sorte de ScreenShot, quoi), qui va générer un TBitmap qui va être assigné au TImage, très exactement avec
dst correspond à Image1.Picture.Bitmap et effectivement, le TImage dans son TPanel m'affiche bien la zone que j'ai sélectionnée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Result:= StretchBlt(dst.Canvas.Handle, 0, 0, dst.Width, dst.Height, src.Canvas.Handle, 0, 0, src.Width, src.Height, SRCCOPY);
Je clique alors sur le bouton des calculs et là, patatras, tous les pixels remontés ont une valeur à 0
Une idée pour corriger cette engeance ?
Inutile de vous préciser que j'ai passé un temps dément sur http://wiki.freepascal.org/Developing_with_Graphics/fr sans aucune étincelle lumineuse...
Un tout dernier mot : au début de la proc de calcul je récupère Image1.Picture.Bitmap.Width et .Height qui sont parfaitement valides (sinon je ne serais pas là à pleurer... ).
Partager