Récupérer une image sous un tableau en delphi

Signaler
-
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
-
Bonjour,

J'ai une image (TBitmap), que je veux récupérer sous un tableau ( récupérer chaque pixel dans une cellule de matrice), et comme je suis débutante, ça fais maintenant deux jours que je cherche une solution!!! J 'en ai trouvé une, qui est la suivante:

Procedure THistoDemo.Test;
type
// élément de bitmap (accéder aux pixels)
TRGBArray = ARRAY[0..0] OF TRGBTriple;
pRGBArray = ^TRGBArray;
var
x, y : integer; // colonnes, lignes
Row : Prgbarray; // pointeur scanline
R,G,B : integer; // les 3 couleurs
HauteurImageCV, LargeurImageCV : integer;
imgSrc : IMG;
imgDest : TBitmap;
iValPixel : integer;
scanrows0 : array[0..4000] of pRGBArray;
begin
LargeurImageCV := cvImgSrc.Imagewidth ;
HauteurImageCV := cvImgSrc.Imageheight ;
imgSrc := IMG(cvImgSrc.Image);
imgDest := TBitmap.Create();
imgDest.SetSize(LargeurImageCV, HauteurImageCV);
For y := 0 to HauteurImageCV-1 do
begin
row := imgDest.scanline[y];
for x := 0 to LargeurImageCV-1 do
begin
{R := (Row[x].rgbTred * 10) div 100;
G := (Row[x].rgbTgreen * 10) div 100;
B := (Row[x].rgbTblue * 10) div 100;
if R > 255 then R := 255 else if R < 0 then R := 0;
if G > 255 then G := 255 else if G < 0 then G := 0;
if B > 255 then B := 255 else if B < 0 then B := 0; }
iValPixel := PixVal(imgSrc, 0, x, y);
row[x].rgbtred := iValPixel;
row[x].rgbtgreen := iValPixel;
row[x].rgbtblue := iValPixel;
//scanrows0 [y,x].rgbtred := iValPixel;
//scanrows0 [y,x].rgbtgreen := iValPixel;;
//scanrows0 [y,x].rgbtblue := iValPixel;
//row[x].rgbtred := scanrows0 [y,x].rgbtred;
//row[x].rgbtgreen := scanrows0 [y,x].rgbtgreen ;
//row[x].rgbtblue := scanrows0 [y,x].rgbtblue;
//imgDest.Canvas.Pixels[x,y] := RGB(iValPixel, iValPixel, iValPixel);
Image.Picture.Assign(imgDest); /// Image est de type TImage -> Affichage
end;
end;
end;

Sauf que lors de l'affichage d'une série de photos (DIAPO GRAP), ça prends beaucoup de temps à s'actualiser.
Est ce que vous auriez une idée, qui face est ce que l'affichage soit plus rapide, et qui pourrait m'aider à avancer dans mon projet s'il vous plait????

Je vous remercie d'avance.

1 réponse

Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
10
Salut nathalg,

Tout çà me parait bien compliqué.
1 - un pixel est de type tColor qui est integer (4 octets). Pourquoi te casses-tu la tête pour récupérer les 3 couleurs (RGB) ?
Pourquoi pas : ImageDst.canvas.pixels(x,y) = ImageSrc.canvas.pixels{x,y] ?
2 - Il y a encore plus simple, je pense que tu peux te passer des 2 boucles for, regarde aussi la méthode draw qui dessine une image
à partir d'une autre, sans balayer les pixels.

Mais pour une débutante, tu as pas mal bossé, continue.
"travaillez, prenez de la peine, un trésor est caché dedans"

solilog