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
| type
TPixelBuffer = array of Byte;
TptrPixelBuffer = ^TPixelBuffer;
var
PixelBuffer : TPixelBuffer;
ptrPixelBuffer : TptrPixelBuffer;
ImageJPEG : TJpegImage;
BitMapFichier : TBitmap;
Largeur,Hauteur : integer;
i,j,c,x : integer;
...
ImageJPEG := TJpegImage.Create;
BitMapFichier := TBitmap.create;
BitMapFichier.PixelFormat := pf24bit;
{fichier JPEG lu dans <ImageJPEG> mais transféré aussitôt dans <BitMapFichier>}
try
ImageJPEG.LoadFromFile('fichier.jpg');
except
on EInvalidGraphic do imageJPEG := nil;
end;
if ( imageJPEG <> nil ) then begin
{mettre l'image Jpeg dans <BitMapFichier>}
BitMapFichier.Assign( ImageJPEG);
Largeur := ImageJpeg.Width;
Hauteur := ImageJpeg.Height;
{transférer les PIXELS à la queue leuleu dans le BUFFER <PixelBuffer> dimensionné à raison de 3 octets par pixel}
SetLength( PixelBuffer, Hauteur * Largeur * 3 );
x := 0;
{la ligne 0 (haut de l'image) est lue en dernier}
for i := Hauteur - 1 Downto 0 do begin
pLine := BitMapFichier.ScanLine[i];
for j := 0 to Largeur-1 do begin
{pour chaque Pixel de la ligne, on récupère dans l'ordre le BLEU, VERT, ROUGE qu'il faut inverser}
for c := 2 Downto 0 do begin
PixelBuffer[x+c] := pLine^;
inc(pLine);
end;
inc(x, 3);
end;
end;
end;
ImageJPEG.Free;
BitMapFichier.Free;
...
{le buffer <PixelBuffer> est maintenant directement exploitable en tant que texture dans la primitive glTexImage2D:}
ptrPixelBuffer := @PixelBuffer;
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB
, Largeur, Hauteur
, 0, GL_RGB , GL_UNSIGNED_BYTE
, ptrPixelBuffer); |
Partager