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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 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