array [0..10] of TRGBTriple : Comment ça marche ?
Bonjour
Avec l'aide d'un étudient en informatique (qui travaille en C), nous avons codé une procedure qui permet d'additionner un flux d'images BMP, mais utilisant mon code de départ je n'arrive pas à comprendre à quoi sert, dans la partie TYPE la taille du tableau ARRAY[0..10] OF TRGBTriple; que j'ai mis à [0..10] pour essais et de constater que mon prog fonctionne alors que dans la littérature c'est positionné à [0..36767] !
Est-til vraiment necessaire d'utiliser cette déclaration Type ?
Voici un bout de code qui montre qui utilise donc Scanline et les TBITMAP.
Code:
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
|
// déclaration
type
BmpAddArray = ARRAY[0..10] OF TRGBTriple;
pBmpAdd = ^BmpAddArray;
TBmpMem = ARRAY[0..10] OF TRGBTriple;
pBmpMem = ^TBmpMem;
pbmpAncienne = ^TBmpMem;
...
VAR
TImageReel : array of real;
TabImage : array of tbitmap;
......
//Bout de code ou j'utilise les pointeurs
Procedure additionBmp(numImage:Byte; var IdxImg:byte);
var
IdxTab : byte;
debutY,finY,debutX,finX:integer;
MireBmp : Trect;
pAffiche : pBmpAdd;
pNouvelle :pbmpMem;
pAncienne :pbmpAncienne;
i,J : integer;
coltRed, coltGreen, coltBlue : integer;
Delta : real;
begin
......
try
IdxTab:=idxImg mod Form3.CMoyenne.Value;
bmpAncienne:= TabImage[IdxTab] ;
for j:=0 to FinY-DebutY-1 do begin //Hauteur
pAffiche := bmpAdd.ScanLine[j]; // ICI ??
pNouvelle := bmpMem.ScanLine[j]; // ICI ??
pAncienne := bmpAncienne.ScanLine[j]; // ICI ??
// pointeur sur premiere
for i:= 0 to FinX-DebutX-1 do begin //Largeur
with pAffiche[i] do
begin
TImageReel[J*TailleMire*3 + 3*i] := TImageReel[J*TailleMire*3 + 3*i] + CoefAdd * (pNouvelle[i].rgbtRed - pAncienne[i].rgbtRed) / Form3.CMoyenne.Value;
TImageReel[J*TailleMire*3 + 3*i+1] := TImageReel[J*TailleMire*3 + 3*i+1] + CoefAdd * (pNouvelle[i].rgbtGreen - pAncienne[i].rgbtGreen) / Form3.CMoyenne.Value;
TImageReel[J*TailleMire*3 + 3*i+2] := TImageReel[J*TailleMire*3 + 3*i+2] + CoefAdd * (pNouvelle[i].rgbtBlue - pAncienne[i].rgbtBlue) / Form3.CMoyenne.Value;
coltRed := round(TImageReel[J*TailleMire*3 + 3*i]);
coltGreen := round(TImageReel[J*TailleMire*3 + 3*i+1]);
coltBlue := round(TImageReel[J*TailleMire*3 + 3*i+2]);
if (coltRed < 0) then coltRed := 0;
if (coltGreen < 0) then coltGreen := 0;
if (coltBlue < 0) then coltBlue := 0;
if (coltRed > 255) then coltRed := 255;
if (coltGreen > 255) then coltGreen := 0;
if (coltBlue > 255) then coltBlue := 0;
{if (coltRed < 0) or (coltGreen< 0) or (coltBlue< 0) then
form3.Memo1.Lines.Add(inttostr(coltRed) + ' ' + inttostr(coltGreen) + ' ' + inttostr(coltBlue));
if (coltRed >255) or (coltGreen>255) or (coltBlue>255) then
form3.Memo1.Lines.Add(inttostr(coltRed) + ' ' + inttostr(coltGreen) + ' ' + inttostr(coltBlue)); }
rgbtRed := coltRed;
rgbtGreen := coltGreen;
rgbtBlue := coltBlue;
end;
end //I
end; //J |
remarques:
TImageReel est un tableau de reels qui permet:? d'additionner les pixels des images .
pAffiche := bmpAdd.ScanLine[j]; pointe sur
BmpAddArray = ARRAY[0..10] OF TRGBTriple; ALORS QUE
pNouvelle := bmpMem.ScanLine[j]; et
pAncienne := bmpAncienne.ScanLine[j]; pointe sur
TBmpMem = ARRAY[0..10] OF TRGBTriple;
et que tout fonctione normalement :koi:http://www.developpez.net/forums/ima...n_confused.gif
:?
Merci d'eclaircir ce domaine peut documenté, en tous les cas difficile à comprendre pour moi (autodidacte).
cordialement
Pierre de Nice